Wpf 在ListView中动态嵌套数据模板
我有一个MyTypeOneViewModel类型的对象显示在ListView的第一列中,我有一个MyTypeTwoViewModel类型的对象显示在ListView的第二列中。这两种类型都具有MyNestedViewModel类型的属性。现在,我想为ListView中的每个单元格显示不同的DataTemplate,具体取决于该属性的实际类型。例如,如果该属性实际包含MyDoubleNestedViewModel,则我希望在该单元格中显示文本框;如果该属性包含MyBooleanNestedViewModel,则我希望在ListView的特定单元格中显示组合框。请注意,DataTemplate在每一行和每一列中都可能有所不同Wpf 在ListView中动态嵌套数据模板,wpf,listview,datatemplate,Wpf,Listview,Datatemplate,我有一个MyTypeOneViewModel类型的对象显示在ListView的第一列中,我有一个MyTypeTwoViewModel类型的对象显示在ListView的第二列中。这两种类型都具有MyNestedViewModel类型的属性。现在,我想为ListView中的每个单元格显示不同的DataTemplate,具体取决于该属性的实际类型。例如,如果该属性实际包含MyDoubleNestedViewModel,则我希望在该单元格中显示文本框;如果该属性包含MyBooleanNestedView
没有TemplateSelector我可以实现这一点吗?WPF能够根据绑定类型自动选择正确的数据模板。但是,在ListView中的嵌套场景中,这是否也会起作用呢?请考虑以下选项: 1。直接绑定到子属性。 将列绑定到子属性(类型为
MyNestedViewModel
)而不是父属性。然后,WPF将根据嵌套视图模型的类型而不是父视图模型的类型选择模板
<GridViewColumn DisplayMemberBinding="{Binding TheChildViewModel}"/>
WPF可以完全满足您的需求 引用包含数据类型的程序集,并为需要显示的每个类型添加DataTemplate资源
xmlns:ui="clr-namespace:YourAssembly"
<Window.Resources>
<DataTemplate DataType="ui:MyDoubleNestedViewModel ">
<Grid Margin="5,5,5,5" >
<TextBlock Text="{Binding Path=Value}"/>
</Grid>
</DataTemplate>
<DataTemplate DataType="ui:MyBooleanNestedViewModel ">
<Grid Margin="5,5,5,5" >
<ComboBox ItemsSource="{Binding Path=Items}"/>
</Grid>
</DataTemplate>
</Window.Resources>
xmlns:ui=“clr命名空间:您的程序集”
现在,此模板将与此窗口中的任何列表或内容控件一起使用
绑定到视图模型对象。您不需要指定ItemTemplate设置
xmlns:ui="clr-namespace:YourAssembly"
<Window.Resources>
<DataTemplate DataType="ui:MyDoubleNestedViewModel ">
<Grid Margin="5,5,5,5" >
<TextBlock Text="{Binding Path=Value}"/>
</Grid>
</DataTemplate>
<DataTemplate DataType="ui:MyBooleanNestedViewModel ">
<Grid Margin="5,5,5,5" >
<ComboBox ItemsSource="{Binding Path=Items}"/>
</Grid>
</DataTemplate>
</Window.Resources>