在WPF中设置自定义属性的问题

时间:2011-10-26 08:31:16

标签: c# wpf

假设我有2个ViewModels和1个View

  • ViewModel_A
  • ViewModel_B

  • View_A

在ViewModel_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永远不会注意到任何变化......
什么是解决这个问题的最佳解决方案?

1 个答案:

答案 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的实例。