【问题标题】:Binding to a list control and finding views绑定到列表控件并查找视图
【发布时间】:2011-03-20 09:27:08
【问题描述】:
我想将视图中的列表控件(如 ListView)绑定到视图模型中的集合。该集合由任意数量的视图模型组成,这些视图模型也具有旨在绑定到它们的视图。
虽然集合中的每个视图模型都将派生自一个共同的基本类型,但它们的派生类型是不同的(它们的视图类型也是如此)。例如,列表中的一个项目可能有一个包含一个文本框和两个按钮的视图,而另一个项目有一个复选框和一个组合列表。
但列表控件在设计时不会知道其项目的视图类型(或项目数)。如何让主视图和/或列表控件使用主视图模型集合中的派生类型来查找适当的项目视图并绑定它们?
【问题讨论】:
标签:
wpf
data-binding
listview
mvvm
【解决方案1】:
您只需要在资源中为每种 ViewModel 类型提供适当的 DataTemplate:
<DataTemplate DataType="{x:Type vm:FooViewModel}">
<v:FooView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:BarViewModel}">
<v:BarView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:BazViewModel}">
<v:BazView />
</DataTemplate>
请注意,这些资源上没有 x:Key 属性:这样,WPF 会根据 ViewModel 的类型自动选择适当的模板