MVVM:基于Model属性更新ViewModel属性

时间:2015-06-09 20:22:35

标签: c# wpf mvvm viewmodel

我在ViewModel中有一些属性,它们会根据模型属性更新进行更新/重新计算。我想要实现这种情况的最佳方法?

我不喜欢订阅Model的PropertyChanged事件处理程序然后更新ViewModel属性的方法。你如何处理这种情况?

2 个答案:

答案 0 :(得分:2)

订阅活动是正确的方法,但我同意你的意见,不想使用PropertyChanged事件。我喜欢单独留下那个活动,并根据需要创建我自己的活动。这是我的方法:

public class Person : INotifyPropertyChanged
{
    //custom events as needed
    public event EventHandler NameChanged = delegate { };

    //needed for INotifyPropertyChanged 
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                _name = value;
                this.NotifyPropertyChanged();

                //Fire my custom event
                this.NameChanged(this, EventArgs.Empty);
            }
        }
    }

    private int _age;
    public int Age
    {
        get { return _age; }
        set
        {
            if (_age != value)
            {
                _age = value;
                this.NotifyPropertyChanged();

                //I am not exposing a custom event for this property.
            }
        }

    private void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
    {
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

在此示例中,Name和Age可用于UI目的,但Name可以观察到UI之外的任何内容。现在,如果删除任何PropertyChanged通知,如果ViewModel订阅了PropertyChanged并解析了字符串,则不会意外地导致运行时错误。

答案 1 :(得分:1)

由于您不希望将依赖关系放在模型中的视图模型上,因此在视图模型中监听模型更改确实是更新基于模型的视图模型属性的正确方法。