MVVM Модель для связи ViewModel - PullRequest
8 голосов
/ 28 апреля 2011

У меня есть простой сценарий с 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 остается прежним ... он выполняет метод set в Свойство модели .

Я хочу позволить пользователю изменить имя человека и вызвать другой метод (поиск в веб-сервисе и т. Д.), И я думаю, что эта функция должна быть в ViewModel.

Я использую Messenger из набора инструментов MVVM Light для связи между различными моделями представления, а также между представлениями и моделями представления.

Теперь я не знаю, должен ли я использовать для этого также медиатор или мне нужен другой способ решить эту проблему.

1 Ответ

14 голосов
/ 28 апреля 2011

Просто подпишитесь на событие PropertyChanged для Person в вашей ViewModel и проверьте свойство "Name" или что вы хотите сделать:

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

void Person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if(e.PropertyName == "Name")
    {
         //do something
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...