Data binding MVVM:当我更改对象本身时,如何通知每个对象属性的更改?

Data binding MVVM:当我更改对象本身时,如何通知每个对象属性的更改?,data-binding,mvvm,caliburn.micro,Data Binding,Mvvm,Caliburn.micro,我有一个包含(Person)Patient属性的ViewModel。在我看来,我绑定到患者的一些属性,比如姓名和年龄 问题是:如果我更换了患者,在我看来什么都不会发生,除非我明确通知每个属性的更改(我使用的是Caliburn.Micro,因此PropertyChangedBase和NotifyOfPropertyChange东西): 更广泛的应用环境是:我有一个PersonManager屏幕,有三个区域,每个区域都有它们的视图和视图模型:人员列表、单个人员的信息以及与每个人员相关的医疗程序列表

我有一个包含
(Person)Patient
属性的ViewModel。在我看来,我绑定到
患者
的一些属性,比如
姓名
年龄

问题是:如果我更换了患者,在我看来什么都不会发生,除非我明确通知每个属性的更改(我使用的是
Caliburn.Micro
,因此
PropertyChangedBase
NotifyOfPropertyChange
东西):

更广泛的应用环境是:我有一个PersonManager屏幕,有三个区域,每个区域都有它们的视图和视图模型:人员列表、单个人员的信息以及与每个人员相关的医疗程序列表


我几乎可以肯定我错过了什么。我想在人员列表中选择一个人,然后显示人员数据和人员过程的区域将通过绑定进行更新,而无需手动通知新选择人员的每个属性更改。

我已使用a解决了此问题,a使用
null
作为参数:

PropertyChanged事件可以指示对象上的所有属性 已使用null或String.Empty作为属性名进行更改 在PropertyChangedEventArgs中

然后,我用以下方法解决了我的问题:

    public Paciente Paciente {
        get { return _paciente; }
        set {
            _paciente = value;
            NotifyOfPropertyChange(null);
        }
    }

成功了

我不确定您的插图代码是否有代码气味,而且您键入的内容(关于许多属性)似乎与您发布的代码示例不符。您有一个子viewmodel,其中包含对
人员的引用。父视图模型上还有一个
CurrentPerson
。当父视图模型
Person
更改时,您需要确保所有子视图模型都随更改而更新,否则其属性仍指向老人对象。另一种方法是将第一个视图直接绑定到整合VM中的第二个视图(在XAML中)…@Charleh实际上我发布的代码中有一点不一致。事实上,我用INPC的一个有点深奥的(IMO)特性解决了这个问题,我现在将把它作为一个答案发布。
    public Paciente Paciente {
        get { return _paciente; }
        set {
            _paciente = value;
            NotifyOfPropertyChange(null);
        }
    }