我有一个集合,它包含多个类型的项目,这些项目都从同一个接口继承.这绑定到ItemsControl.窗口的DataContext设置为包含集合的ViewModel.
我想要做的是让集合中不同类型的每个项目使用不同的ViewModel.
因此,如果我在itemscontrol中的模板设置如下,我希望第一个模板具有ViewModel1的DataContext,第二个模板具有ViewModel2的DataContext.我无法直接在它们上设置DataContext,因为ItemsControl会将DataContext设置为该项.
任何人都知道这个解决方案,或者使用MVVM更好的方法吗?
<DataTemplate DataType="{x:Type Models:ItemType1}">
<Controls:MyControl Text="{Binding Body}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type Models:ItemType2}">
<Controls:MyControl2 Text="{Binding Body}"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
你为什么不公开一组ViewModels?
var viewModels = new ObservableCollection<ViewModelBase>(items.Select(CreateViewModelFromItem));
private ViewModelBase CreateViewModelFromItem(Item item)
{
if (item is ItemType1) return new ViewModel1((ItemType1)item);
if (item is ItemType2) return new ViewModel2((ItemType2)item);
...
throw new ArgumentException("Unknown model type");
}
Run Code Online (Sandbox Code Playgroud)
并更改您的datatemplates以绑定到viewmodels,而不是项目...
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |