wpf mvvm - 一个视图中的主要细节最佳实现?

时间:2014-11-27 09:25:03

标签: c# wpf xaml mvvm master-detail

我有一个包含数据网格的视图。在datagrid下面,我有一些控件来编辑数据网格中所选项目的属性(比如一个管理员)。

所以我有一个绑定到datagrid SelectedItem的属性:

管理员有一个名为Name的属性。 所以选择经理时。数据网格下面的文本框必须绑定到name属性,我可以在xaml中执行此操作,如下所示:

<TextBox Text="{Binding Path=SelectedManager.Name, UpdateSourceTrigger=PropertyChanged}" />

问题是我喜欢在SelectedManager.Name的值发生变化时实现一些额外的代码,所以我需要在我的ViewModel中有一个属性,如下所示:

private Manager _selectedManager;
public Manager SelectedManager
{
    get { return _selectedManager; }
    set
    {
        _selectedManager = value;
        RaisePropertyChanged("SelectedManager");
    }
}

因此,当SelectedManager更改时,这不会更新ManagerName属性ofcourse。我有3个解决方案,我想知道你对这些的看法,或者你有更好的方法。我的解决方案是:

1:当SelectedManager设置时,我可以调用RaisePropertyChanged(string.Empty); 这将更新所有绑定。

2:当设置SelectedManager时,我可以调用RaisePropertyChanged(“ManagerName”)); 这将更新特定属性的绑定(但是infact Manager包含更多属性,因此我必须为每个属性执行此操作)。

我不认为解决方案1和2是干净的所以解决方案3是:

创建一个内部类DetailsViewModel(所以这基本上是一个childviewmodel)来处理细节属性。将详细控件的datacontext绑定到DetailsViewModel的实例。这看起来很棒,但问题是,我喜欢从ChildViewModel访问ParentViewModel,我不认为将ParentViewModel传递给ChildViewModel是一个好主意。

那么什么是最干净的解决方案,还是有更好的方法来解决这个问题?

视图的屏幕截图: http://imageshack.com/a/img661/21/2xXws6.png

0 个答案:

没有答案