我正在设计主/详细视图。目前,我在主视图中有一个用户控件(详细信息),并且都有自己的vm。一方面,我认为应该只有一个虚拟机,因为没有主机,细节永远不会存在。在一个虚拟机中处理CRUD进程也会更容易,因为它们彼此紧密相关。另一方面,它们是独立的实体,并且具有两个较小的vm而不是一个较大的vm似乎更易于管理。有什么想法吗?
答案 0 :(得分:2)
对于给定的场景,我会创建两个不同的视图并将其绑定到同一个视图模型。
如果您从数据库中延迟加载内容,则实现两个视图模型可能更加清晰
答案 1 :(得分:0)
视图模型是视图的模型。如果您有两个视图,则每个视图都有一个视图模型。如果视图是相互依赖的,那么模型也是如此。
随着细节项目的复杂性增加,为细节项目建立单独的视图模型的智慧变得明显。举一个简单的例子,想象一下在详细视图中显示命令的超链接,如果详细信息项符合某种标准,则应启用该超链接。你要把超链接命令绑定的来源放在哪里?
答案 2 :(得分:0)
我的其中一个应用就是这种情况。我有一个带有项目的主ListView和一个详细视图,其中包含有关所选项的扩展信息。细节视图有自己的视图模型。
我使用Converter:
将详细视图DataContext与来自master的SelectedItem绑定在一起<view:MyDetailView Grid.Row="2"
DataContext="{Binding Path=SelectedItem, ElementName=masterList, Converter={StaticResource EntityToDetailViewModelConverter}}">
</view:FontDetailView>
转换器,
class EntityToDetailViewModelConverter: System.Windows.Data.IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
MyEntity entity = value as MyEntity;
return new ViewModel.MyDetailViewModel(entity);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}