Из того, что я (как мне кажется) понимаю, заключается в том, что реализация INotifyPropertyChanged в ModelView позволяет вызвать событие PropertyChanged в случае изменения свойства.
Таким образом, представление должно получать уведомление об изменении базового свойства, и, следовательно, пользовательский интерфейс должен получать новые изменения.
Правильно ли я понял теорию?
Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть инфраструктура DataGrid, связанная с ViewModel. Как только я изменяю значение Date, я вижу, как правильно установлено свойство ViewModel и возникает событие. Но я не подписался на это событие извне, как пользовательский интерфейс получает уведомление?
Я спрашиваю об этом, потому что я думаю, что пользовательский интерфейс вообще не является неофициальным. Я поместил второе текстовое поле, которое связывает ViewModel с тем же базовым свойством Model. Однако если я изменю это свойство с помощью DataGrid, TextBox (Mode = OneWay) не будет обновляться автоматически.
Я фактически использую работу MVVM-Light Frame и использую ViewModelBase вместо INotifyPropertyChanged и делаю RaisePropertyChanged (...). Но результат должен быть похожим.
Должен ли я как-то вручную подписать TextBox на это событие?
Редактировать: Я решил проблему, но не понимаю, почему именно это происходит. Прежде чем ответить на Вопрос, мне нужно немного подробнее рассказать об архитектуре. Сетка данных привязана к свойству A в ViewModelA, которое возвращает ObservableCollection<ViewModelB>.
ViewModelB, на самом деле содержит все свойства, которые должна отображать Сетка. Все эти свойства запускаются в их Setters, естественно, OnProperyChanged.
TextBox был привязан к PropertyB, который также находится в ViewModelA. Но он возвращает непосредственно строку, поэтому базовый метод получения PerpertyB возвращает это:
_cashflowInputs[0].ProjectedDate.ToString();
Однако, если я не привязываю TextBox к этому свойству B, но привязываю его и к PropertyA, он работает:
Это странно. Я ожидал, что это сработает так же. Оба свойства находятся в одной и той же ViewModel и имеют одинаковый private ObservableCollection<ViewModelB>
, почему это должно иметь значение?
public ObservableCollection<ViewModelB> PropertyA
{
get { return _cashflowInputs;}
}
public string PropertyB
{
get { return _cashflowInputs[0].ProjectedDate.ToString(); }
}
Kave