假设我有2个ViewModels和1个View
ViewModel_B
View_A
我有一个costum属性类PersonClass PersonClass有一些字段
在View_A中,我将一些文本框绑定到PersonClass属性,该属性使用datacontext ViewModel_A双向绑定。 在ViewModel_B中,想要从代码更新PersonClass属性。
这是最好的方法,因为我正在工作,我正在ViewModel_B中创建一个ViewModel_A的新实例,而不是设置属性PersonClass。
ViewModel_A viewModel_A = new ViewModel_A();
viewModel_A.PersonClass.Name = someString;
viewModel_A.PersonClass.Age = someString;
...
就像我现在这样做我有两个不同的ViewModel_A实例,所以我的属性PersonClass永远不会注意到任何变化......
什么是解决这个问题的最佳解决方案?
答案 0 :(得分:1)
您的PersonClass必须实现INotifyPropertyChanged,并且您的View必须将viewmodel实例设置为DataContext。 处理嵌套ViewModel的一个好方法是使用ContentControl s 当然这不是必需的,但添加了一种很好的自定义方式,只需切换子视图模型就可以更改UI的各个部分。
class ViewModel_B
{
public ViewModel_A MySubViewModel{get;set;}
}
<DataTemplate x:Key="vmaTemplate" DataType="{x:Type ViewModel_A}">
<TextBlock Text="{Binding PersonClass.Name}"/>
</DataTemplate>
<Grid>
<ContentControl Content="{Binding MySubViewModel}"
ContentTemplate="{StaticTemplate vmaTemplate}"/>
</Grid>
此示例假设Grid
具有DataContext
ViewModel_B
的实例。