1

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

4

3 回答 3

2

对于给定的场景,我会创建两个不同的视图并将其绑定到同一个视图模型。

如果您从数据库中延迟加载内容,那么实现两个 viewmodel 可能会更干净。

于 2010-07-02T14:37:56.067 回答
0

视图模型是视图的模型。如果您有两个视图,则每个视图都有一个视图模型。如果视图是相互依赖的,那么模型也是如此。

随着细节项的复杂性增加,为细节项建立一个单独的视图模型的智慧变得显而易见。举个简单的例子,想象一个超链接在详细视图中显示一个命令,如果详细项目符合某种标准,则应该启用该命令。你打算把超链接的命令绑定的来源放在哪里?

于 2010-07-02T16:59:43.083 回答
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();
    }
}
于 2012-04-03T08:10:49.557 回答