单独的视图模型中的主/细节?

时间:2010-07-02 14:32:05

标签: wpf mvvm master-detail

我正在设计主/详细视图。目前,我在主视图中有一个用户控件(详细信息),并且都有自己的vm。一方面,我认为应该只有一个虚拟机,因为没有主机,细节永远不会存在。在一个虚拟机中处理CRUD进程也会更容易,因为它们彼此紧密相关。另一方面,它们是独立的实体,并且具有两个较小的vm而不是一个较大的vm似乎更易于管理。有什么想法吗?

3 个答案:

答案 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();
    }
}