4

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

为此,我设置了窗口的DataContext = ViewModel. 但是,当我尝试将 a 绑定ContentControl到该 DataContext 并对其应用 aDataTemplateSelector时,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

4

2 回答 2

4

这对我有用:

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

编辑:

不过,我同意 Aaron 的观点,这可能不是完成事情的最佳方式。您说您正在使用 ViewModel。最简单的方法可能是将您的 ItemsControl 绑定到 Viewmodel 上的新“SelectedCollection”属性,该属性公开所需的集合。然后在您的标志中(假设它是一个属性),您可以为“SelectedCollection”触发 propertychanged。

于 2011-02-22T21:06:30.607 回答
2

这里发生了很多事情...

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

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

很多不同的选择......如果我理解正确的话,DataTemplateSelector不应该是其中之一。

于 2011-02-22T21:00:14.527 回答