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

时间:2013-05-07 13:32:49

标签: 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??
        }
    }
}

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

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

1 个答案:

答案 0 :(得分:8)

我使用feature of PropertyChanged event解决了问题,{{3}}使用null作为参数:

  

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

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

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

它有效!