У меня есть свойство зависимости на элементе управления в моем представлении, которое привязано к полю на моей модели ViewModel. Когда пользователь нажимает элемент меню, я хочу, чтобы элемент управления обновил значение этого свойства, чтобы ViewModel мог сохранить его в XML-файле. Каков правильный механизм, чтобы запрос ViewModel отображал это свойство?Как может ViewModel запрашивать обновление в представлении в WPF/MVVM?
ответ
Ваш объект должен реализовывать интерфейс 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 -> изменить вид модели недвижимости -> повысить свойство измененное событие -> Вид собственности изменено путем связывания
Как правило, элементы управления MVVM обновляют связанные свойства (не поля) сразу же после их редактирования. ViewModel - это «состояние», представление - это только один из способов увидеть это состояние.
Ваш контроль должен обновлять ViewModel всякий раз, когда он редактируется. Затем ваша ViewModel может сохранить ее в XML при вызове команды меню.
Спасибо за ваш ответ. Проблема в том, что для получения данных для представления требуется вызов метода. Этот метод обычно не вызывается, если данные не нужны. Данные не обновляются автоматически при изменении вида. – Beth
Все еще немного неясно, какая именно последовательность вы хотите. Это ViewModel, который отвечает за получение данных. Если в какой-то момент представление должно инициировать извлечение данных, выставляют команду для этого в вашей модели ViewModel и вызывают ее из представления (ваше меню в OP?) – GazTheDestroyer
ViewModel должен запускать представление для извлечения данных из себя. В представлении отображается состояние, которое необходимо захватить вызовом метода на самом элементе управления, когда элемент меню щелкнут и отправлен обратно в ViewModel. – Beth
У меня была проблема с тем, что viewmodel не обновлялся при нажатии на элемент меню сразу после записи в TextBox.
С помощью параметра UpdateSourceTrigger = PropertyChanged, он работал на TextBoxes:
<TextBox Grid.Column="5" Grid.Row="7" Text="{Binding SelectedPerson.Room, UpdateSourceTrigger=PropertyChanged}"></TextBox>
Но, к сожалению, не DatePickers ...
Самое странное в том, что при нажатии на кнопку вместо пункта меню, DatePicker обновляет viewmodel. Поскольку у меня нет больше времени для поиска исправления прямо сейчас, я просто изменю свои пункты меню на кнопки.
Редактировать: проблема не в меню, а в самом меню. Когда я перемещаю menuitems из меню, он работает.
- 1. WPFMVVM Set Control Focused
- 2. Как показать все элементы ViewModel в представлении
- 3. Как обратиться к ViewModel в представлении
- 4. WPF: Как создать ViewModel в представлении
- 5. Обновление вида в ViewModel
- 6. Задать объект в ViewModel в другом представлении
- 7. Обработка данных из ViewModel в представлении
- 8. Создает экземпляр ViewModel в представлении ok?
- 9. Дисплей Среднее значение из ViewModel в представлении
- 10. Вызов анимации в представлении из viewmodel (WPF)
- 11. Две таблицы в представлении с ViewModel
- 12. В C#, как я могу установить DataContext в представлении ViewModel?
- 13. Вызов метода в представлении CodeBehind из ViewModel?
- 14. Mvc 3: отображение ViewModel элементов в представлении
- 15. Если фокус управления ViewModel в представлении
- 16. Нужно лучше подойти к ViewModel в представлении
- 17. Самообучение Viewmodel в подробном представлении - Плохая практика?
- 18. Привязка к объекту в представлении ViewModel
- 19. WPF Change ViewModel Свойство в представлении
- 20. ViewModel 3 моделей в одном представлении
- 21. MVC ViewModel не заполняется в представлении
- 22. Невозможно увидеть свойство ViewModel в представлении?
- 23. Обновление данных в представлении - oracle
- 24. обновление определенного столбца в представлении
- 25. Обновление правила в представлении - PostgreSQL
- 26. Обновление нокаут viewModel
- 27. Обновление угловой переменной в представлении
- 28. не может обновить watchOS и всегда запрашивать «Проверка на обновление ...»
- 29. Как еще я могу вызвать анимацию в представлении из viewmodel?
- 30. WPF Prism Обновление ViewModel
Я думаю, что ОП задает обратное. View-> ViewModel, а не ViewModel-> View – GazTheDestroyer
GazTheDestroyer верен. – Beth
Я отредактировал мой ответ, я добавил описание, как вы можете это сделать. –