Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何绑定WPF控件';将内容添加到其容器中';s DataContext,以便我可以基于该对象应用DataTemplateSelector?_Wpf_Datatemplateselector - Fatal编程技术网

如何绑定WPF控件';将内容添加到其容器中';s DataContext,以便我可以基于该对象应用DataTemplateSelector?

如何绑定WPF控件';将内容添加到其容器中';s DataContext,以便我可以基于该对象应用DataTemplateSelector?,wpf,datatemplateselector,Wpf,Datatemplateselector,我试图在包含两个集合a和B的ViewModel上绑定WPF窗口。我试图使用DataTemplates根据ViewModel中标志的设置显示a或B 为此,我设置了窗口的DataContext=ViewModel。但是,当我尝试将ContentControl绑定到该DataContext并对其应用DataTemplateSelector时,选择器的SelectTemplate(对象项,DependencyObject容器)方法的项参数始终为空: <Window [snip] Title="Ma

我试图在包含两个集合a和B的ViewModel上绑定WPF窗口。我试图使用DataTemplates根据ViewModel中标志的设置显示a或B

为此,我设置了窗口的
DataContext=ViewModel
。但是,当我尝试将
ContentControl
绑定到该DataContext并对其应用
DataTemplateSelector
时,选择器的
SelectTemplate(对象项,DependencyObject容器)
方法的
参数始终为空:

<Window [snip] Title="MainWindow">
    <Window.Resources>
        <!-- DataTemplate and Selector declarations -->
    </Window.Resources>
    <Grid>
        <ContentControl Content="{Binding}"              
                        ContentTemplateSelector="{StaticResource templateSelector}" />
    </Grid>    
</Window>


我应该如何绑定
ContentControl
,以便将窗口的ViewModel传递给它的
DataTemplateSelector

这里发生了很多事情

您说您正在使用
DataTemplateSelector
显示集合A或集合B,同时您说您正在将其中一个集合设置为窗口的
DataContext

如果要隐藏一个集合中的数据,请对集合本身执行筛选。另一种方法是通过
IValueConverter
IMultiValueConverter
运行绑定。另一种解决方案是将两个UI元素分别绑定到每个集合,并根据ViewModel中的值更改UI元素的可见性

有很多不同的选项…如果我理解正确,
DataTemplateSelector
不应该是其中之一。

这对我来说很有用:

<ContentControl Content="{Binding DataContext, RelativeSource={RelativeSource Self}}"              
                    ContentTemplateSelector="{StaticResource templateSelector}" />

编辑:


不过,我同意亚伦的观点,这可能不是完成事情的最佳方式。你说你使用的是ViewModel。最简单的方法可能是将ItemsControl绑定到Viewmodel上的新“SelectedCollection”属性,该属性公开所需的集合。然后在您的标志中(假设它是一个属性),您可以为“SelectedCollection”触发propertychanged。如果不清楚,请道歉:我没有将其中一个集合设置为DataContext,而是将包含两个集合的ViewModel设置为DataContext。尽管如此,进一步研究后,我同意DataTemplateSelector不是正确的解决方案!我相信,使用RelativeSource显式引用
DataContext
属性是我所缺少的,谢谢。正如你们提到的,我已经放弃了DataTemplateSelector方法;DTC似乎用于将不同模板应用于对象集合的成员。我发现使用
DataTrigger
交换数据模板是成功的。