我正在尝试在包含两个集合A和B的ViewModel上绑定一个WPF窗口。我正在尝试使用DataTemplates来显示A或B,具体取决于我的ViewModel中的标志设置。
为此,我设置了窗口DataContext = ViewModel
。但是,当我尝试将ContentControl
绑定到该DataContext并对其应用DataTemplateSelector
时,选择器的item
方法的SelectTemplate(object item, DependencyObject container)
参数始终为null:
<Window [snip] Title="MainWindow">
<Window.Resources>
<!-- DataTemplate and Selector declarations -->
</Window.Resources>
<Grid>
<ContentControl Content="{Binding}"
ContentTemplateSelector="{StaticResource templateSelector}" />
</Grid>
</Window>
我应该如何绑定ContentControl
,以便将Window的ViewModel传递给DataTemplateSelector
?
答案 0 :(得分:4)
这对我有用:
<ContentControl Content="{Binding DataContext, RelativeSource={RelativeSource Self}}"
ContentTemplateSelector="{StaticResource templateSelector}" />
编辑:
我同意Aaron的观点,认为这可能不是完成任务的最佳方法。你说你正在使用ViewModel。最简单的方法可能是将ItemsControl绑定到Viewmodel上的新“SelectedCollection”属性,该属性公开所需的集合。然后在你的旗帜中(假设它是一个属性)你可以为“SelectedCollection”触发propertychanged。
答案 1 :(得分:2)
这里发生了很多事情......
您说您正在使用DataTemplateSelector
来显示集合A或集合B,同时您声明要将其中一个集合设置为窗口的DataContext
。
如果要隐藏一个集合中的数据,请对集合本身执行过滤。另一种方法是通过IValueConverter
或IMultiValueConverter
运行绑定。另一种解决方案可能是分别将两个UI元素绑定到每个集合,并根据ViewModel中的值更改UI元素的Visiblity
。
很多不同的选择......如果我理解正确,DataTemplateSelector
不应该是其中之一。