2013-07-10 3 views
3

В моем приложении WPF у меня есть свойство TreeView IsSelected, привязанное к свойству в моем классе Model. Таким образом, выбранный элемент задается в классе модели. Мне нужно уведомить мою ViewModel всякий раз, когда выбранный элемент установлен/изменен. Как я могу это сделать?Уведомление ViewModel об изменении свойства из класса модели

Заранее спасибо.

+2

проверить часть «Обновить» [http://stackoverflow.com/a/16341172/1834662]. [Свойство Josh Smith's PropertyObserver] (http://joshsmithonwpf.wordpress.com/2009/07/11/one-way-to-avoid-messy-propertychanged-event-handling/) отлично, если свойство модели соответствует требованиям INPC. Если он не реализует INPC, присвойте свой объект View 'SelectedItem', привязанный к виртуальной машине вместо Модели, и в настройщике свойств обновите модель из виртуальной машины. – Viv

+0

Если вы хотите уведомить в viewmodel о свой changechange, вам необходимо привязать к свойству, представленному в viewmodel, или вы можете просто сделать другое свойство и присвоить свой свойство модели этому свойству viewModel, чтобы каждый раз, когда вы выбираете изменение свойства viewmodel, вы будете повышаться. . – Vishal

+0

Я не могу привязываться к Property, присутствующему в ViewModel. как моя модель, так и ViewModel реализуют класс INotifyPropertyChange. Могу ли я это использовать? 'OnPropertyChange (" PropertyName ")' Свойство PropertyName находится в ViewModel, но моя модель не поднимает это свойство, потому что ему не удается найти свойство. Есть идеи? – WAQ

ответ

4

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

public class Model : INotifyPropertyChanged 
{ 
    private string _name; 
    public string Name { 
     get {return _name;} 
     set { 
     _name = value; 
     NotifyPropertyChanged("Name"); 
    } 
// etc... including INPC implementation 
} 

public class ViewModel : INotifyPropertyChanged { 
    public ViewModel (Model model){ 
     this.MyModel = model; 
     this.MyModel.PropertyChanged += (s,e) => { DoSomething();}; 
    } 

    public Model MyModel { get; set; } 
} 
Смежные вопросы