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

hel*_*ker 2 data-binding mvvm caliburn.micro

我有一个包含(Person)Patient属性的ViewModel .在我的视图中,我绑定了一些属性Patient,例如NameAge.

问题是:如果我改变患者,我的视图中没有任何反应,除非我明确通知每个属性更改(我正在使用Caliburn.Micro这些PropertyChangedBaseNotifyOfPropertyChange东西):

public class PersonViewModel : PropertyChangedBase {

    Person _patient;

    public Person Patient {
        get { return _patient; }
        set {
            _patient = value;
            NotifyOfPropertyChange(() => Patient); // this doesn't update the view
            NotifyOfPropertyChange(() => Name); // this updates, but would I need one line for each property??
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

更广泛的应用程序上下文是这样的:我有一个PersonManager屏幕,有三个区域,每个区域都有自己的视图和视图模型:人员列表,单个人的信息以及与每个人相关的医疗程序列表.

我几乎肯定我在这里遗漏了一些东西.我想在人员列表中选择一个人,然后显示人员数据和人员程序的区域将通过绑定进行更新,而不必手动通知新选择的人员的每个属性更改.

hel*_*ker 8

我使用事件的一个功能PropertyChanged解决了这个问题,该事件null用作参数:

PropertyChanged事件可以通过使用null或String.Empty作为PropertyChangedEventArgs中的属性名称来指示对象上的所有属性都已更改.

然后,我解决了我的问题:

    public Paciente Paciente {
        get { return _paciente; }
        set {
            _paciente = value;
            NotifyOfPropertyChange(null);
        }
    }
Run Code Online (Sandbox Code Playgroud)

它工作了!