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

本文关键字:问题 自定义属性 设置 WPF | 更新日期: 2023-09-27 18:12:30

假设我有2个ViewModels和1个View

  • ViewModel_A
  • ViewModel_B

  • View_A

在ViewModel_A我有一个服装属性类PersonClassPersonClass有一些字段

    <
  • 名称/gh>年龄
  • 性别

在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;

就像我现在做的那样,我有2个不同的ViewModel_A实例,所以我的属性PersonClass永远不会注意到任何变化…
解决这个问题的最好办法是什么?

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

你的PersonClass必须实现INotifyPropertyChanged和你的视图必须得到一个视图模型实例设置为DataContext。处理嵌套viewmodel的一个好方法是使用ContentControls这当然不是必需的,但增加了一种很好的自定义方式,只需切换子视图模型就可以更改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>

本例假设GridViewModel_B的一个实例作为DataContext