Как ViewModel может запросить обновление в представлении в WPF / MVVM? - PullRequest
1 голос
/ 26 марта 2012

У меня есть свойство зависимости для элемента управления в моем представлении, которое связано с полем в моей модели представления. Когда пользователь щелкает элемент меню, я хочу, чтобы элемент управления обновил значение этого свойства, чтобы ViewModel мог сохранить его в файле XML. Каков правильный механизм запроса ViewModel, чтобы View обновил это свойство?

Ответы [ 3 ]

1 голос
/ 26 марта 2012

Как правило, элементы управления MVVM обновляют свои связанные свойства (не поля) сразу же после их редактирования. ViewModel - это «состояние», View - только один из способов увидеть это состояние.

Ваш элемент управления должен обновлять ViewModel всякий раз, когда он редактируется. Затем ваша ViewModel может сохранить его в XML при вызове команды меню.

0 голосов
/ 18 апреля 2017

У меня была проблема, что модель представления не обновлялась при нажатии на элемент меню сразу после записи в TextBox.

С параметром UpdateSourceTrigger = PropertyChanged это работало для TextBoxes:

<TextBox Grid.Column="5" Grid.Row="7" Text="{Binding SelectedPerson.Room, UpdateSourceTrigger=PropertyChanged}"></TextBox>

Но, к сожалению, не для DatePickers ...

Странно то, что при нажатии кнопки вместо элемента меню DatePicker обновляет модель представления.Поскольку у меня нет больше времени на поиск исправления, я просто изменю свои пункты меню на кнопки.


Редактировать: проблема не в пункте меню, а в самом меню.Когда я перемещаю элементы меню из меню, оно работает.

0 голосов
/ 26 марта 2012

Ваш объект должен реализовывать интерфейс INotifyPropertyChanged, и ваши свойства должны выглядеть следующим образом

private string _property;
public string Property
{
  get { return _property; }
  set 
  { 
    if(_property == value) return;
    _property = value;
    RaisePropertyChanged("Property");
  }
}

, поэтому каждое изменение, внесенное в свойство, будет каскадно отображаться через механизм привязки.

Свойство команды пункта меню будет связано с командой, объявленной в модели представления, и оно вызовет метод в модели представления и установит значение свойства.Изменение будет каскадно отображаться для просмотра:

menuItem.Click -> menuItem.Command.Execute -> viewModel.method -> изменить свойство модели представления -> поднять свойство change event -> свойство view измененочерез переплет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...