все что связано с моей работой
Главная » Програмирование » Зачем INotifyPropertyChanged в модели?

Зачем INotifyPropertyChanged в модели?

Изучая C# и MVVM столкнулся с некоторыми трудностями, из-за того, что собственно не только технология MVVM новая для меня, но и знание самого языка на уровне книг рассказывающих про синтаксис.

Все статьи которые мне попадались рассказывали от реализации этого интерфейса в ViewModel. Создается ViewModel, в нем публичные свойства которые при установки вызывали метод:


private string _editboxText;
public string editboxText
{
  get { return _editboxText; }
  set
  {
    if (value != _editboxText)
      {
        _editboxText = value;
        RaisePropertyChanged("editboxText");
      }
    }
}

Но никак не мог понять как при такой схеме отловить редактирование в ячейке DataGrid, с обычными полями ввода проблем нет – они привязываются к свойствам ViewModel. А вот с DataGrid трудности. Дело в том, что к DataGrid привязывается коллекция, и “отловить” можно изменения коллекции, а не ее элементов. И к примеру изменение из вне, не обновляет данные в таблице, элементы, пока не отсортируешь или еще что-нибудь не сделаешь с коллекцией.

Так вот, реализация интерфейса в модели, как раз, дает такую возможность. И сейчас все кажется очень очевидным, но возможно не правильно перевел или понял статью, но факт остается фактом недели две топтался на месте. Во всех статьях примерами MVVM были окна редактирования данных, в тех редких примерах где был ListBox он фигурировал только для отображения данных коллекции, а если и было редактирование то не в самом элементе, а в элементах расположенных тут же на форме (через SelectedItem). А в таких примерах обычно очень простая модель, очень точно показывающая принцип разделения (Model — ViewModel — View), но именно он тут и вводил в заблуждение.

В двух словах смысл таков: Все что будет связываться (биндится) во View, должно в сеттере (set) вызывать RaisePropertyChanged если реализуется через INotifyPropertyChanged или должно быть реализовано через DependencyObject!

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.