MVVM模型到ViewModel通信

时间:2011-04-28 16:33:00

标签: c# .net silverlight mvvm

我有一个简单的场景,包括View,ViewModel和自定义类型。

模型类类似于:

public class Person : Validation.DataError, INotifyPropertyChanged
{
    #region INotifyProperty

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion


    public global::System.String name
    {
        get
        {
            return _name;
        }
        set
        {
            _name= value;
            RaisePropertyChanged("name");
        }
    }
    private global::System.String _name;

}

在ViewModel中我有一个Person属性:

private Model.Person person;

        public Model.Person Person
        {
            get
            {
                return person;
            }
            set 
            {
                this.person= value;

                this.RaisePropertyChanged("Person");
                this.SavePersonCommand.OnCanExecuteChanged();
            }
        }

在我的视图中,我有一个绑定到Person.name

的文本框

所以ViewModel没有执行 set方法,因为Person对象仍然相同......它正在 Model属性中执行set方法。

我想让用户更改人名并调用其他方法(搜索Web服务和其他内容......)我认为此功能应该在ViewModel中。

我正在使用MVVM Light工具包中的Messenger在不同的视图模型之间以及视图和视图模型之间进行通信。

现在我不知道我是否应该使用调解员,或者我应该知道另一种解决方法。

1 个答案:

答案 0 :(得分:14)

只需订阅ViewModel中Person的PropertyChanged事件,并检查“Name”属性,或者您想做的任何事情:

Person.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Person_PropertyChanged);

void Person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if(e.PropertyName == "Name")
    {
         //do something
    }
}