PropertyChanged не работает должным образом - PullRequest
1 голос
/ 12 июня 2010

У меня есть приложение Silverlight, в котором я реализовал шаблон MVVM.В моем приложении есть дочернее окно, на котором у меня есть ComboBox.Я связал ItemsSource и SelectedItem моего комбинированного списка со свойством (typeof ObservableCollection) и свойством MyType соответствующим образом.MyType - это «МОДЕЛЬ», полученная из INotifyPropertyChanged.Когда мое окно загружено, я устанавливаю значения для этих свойств.Но мой выпадающий список не отображает выбранный элемент.Я обнаружил, что когда я устанавливаю свойство, которое привязано к выбранному элементу (в ViewModel), событие PropertyChanged имеет значение null.Может кто-нибудь мне помочь.Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 августа 2010

PropertyChanged работает нормально, так что это должно быть в вашей реализации. Простая реализация измененного INotifyProperty не достаточно хороша, вам просто нужно вызвать событие.

Например, это не будет работать:

public class Model : INotifyPropertyChanged
{
    public string Title { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
}

Для того, чтобы он заработал, необходимо поднять свойство изменено. Самый простой способ - заключить логику в метод, например так:

public class Model : INotifyPropertyChanged 
{
   private string _title;

   public string Title
   { 
      get { return _title; }
      set 
      {
         _title = value;
         RaisePropertyChanged("Title");
      }
   }

   protected void RaisePropertyChanged(string propertyName) 
   {
      var handler = PropertyChanged;
      if (handler != null)   
      {
         handler(this, new PropertyChangedEventArgs(propertyName));
      }
   }

    public event PropertyChangedEventHandler PropertyChanged;

}

Конечно, вы можете поместить событие и метод в базовый класс для наследования, чтобы его могли использовать несколько моделей.

0 голосов
/ 13 июня 2010

Из того, как вы это описали, единственное, с чем связано, - это ViewModel, но единственное, что реализует INotifyPropertyChanged, - это MyType.На самом деле ничто не является обязательным для экземпляра моего типа для прослушивания его события PropertyChanged, поэтому его значение равно null.

Похоже, вы не реализовали INotifyPropertyChanged в своей ViewModel.

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