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