我有一个包含数据网格的视图。在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是一个好主意。
那么什么是最干净的解决方案,还是有更好的方法来解决这个问题?