我有一个View,它显示了一个DataGrid绑定到ObservableCollectionViewModel中的a.为了便于讨论,我们假设我们有一个Team包含团队的视图DataGrid,其中每行代表一个Player.
我的问题是我应该使用什么数据类型来代表我的Team收藏中的玩家.集合中的项目是ViewModels本身是一个好主意吗?在这种情况下,我的TeamView将与单个TeamViewModel以及任意数量的PlayerViewModel(在Team集合中)相关联.
将多个ViewModel与单个View相关联是否违反了MVVM的任何设计准则,是否有实现此方案的首选方法?
谢谢!
Kie*_*one 40
不,那没关系; 每个对象本身应该是一个ViewModel.它使代码更清晰,更好的交互,并记住,如果它运作良好,那么它是正确的(即使它违反指南).
我会按照你的处方方式做到这一点.我想我的网格绑定到Team,这将有一个ObservableCollection<Player>,这里Player是另一种视图模型型类.每个行项都会得到Player它DataContext,所以你仍然可以像你期望的那样绑定到ViewModel属性:并且Player仍然可以拥有s(可能是RelayCommands)的public属性来ICommand进行操作!
希望有所帮助!
Gro*_*kys 11
我认为这是推荐的设计,而不是违反指导方针.至少在我的项目中,你会反复看到这种模式.
这种模式与DataTemplates结合使用特别有用.例如,你可以在你的PlayerViewModel的Application.Resources中定义一个DataTemplate,如下所示:
<DataTemplate DataType="viewModels:PlayerViewModel">
<StackPanel Orientation="Vertical">
<Image Source="/Images/Player.png"/>
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
然后,如果您想显示一个玩家列表,只需将ListBox等绑定到TeamViewModel.Players ObservableCollection,您就会自动获得为每个玩家显示的上述DataTemplate:
<ListBox ItemsSource="{Binding Players}"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15938 次 |
| 最近记录: |