Привязка данных и INotifyPropertyChanged - PullRequest
1 голос
/ 08 ноября 2011

У меня есть ComboBox, который получает данные из другого класса

public partial class MainWindow : Window
{
      private ObservableCollection<MyDataClass> _myList = new ObservableCollection<MyDataClass>();

      public MainWindow()
      {
           InitializeComponent();
           comboBox1.DataContext = _myList;
      }

      private void Button_Click(object sender, EventArgs e)
      {
           _myList = AnotherClass.SomeMethod();
      }
}

Единственный способ обновить данные ComboBox после нажатия кнопки - это реализовать интерфейс INotifyPropertyChanged в MyDataClass, или есть другие способы сделать это?Я ищу другой путь, потому что MyDataClass генерируется из веб-службы, поэтому мне нужно создать некоторый класс адаптера для реализации INotifyPropertyChanged

Ответы [ 2 ]

1 голос
/ 08 ноября 2011
public partial class MainWindow : Window, INotifyPropertyChanged
{
      private ObservableCollection<MyDataClass> m_myList;
      public ObservableCollection<MyDataClass> _myList
      {
         get
         {
             return m_myList;
         }
         set
         {
             m_myList = value;
             RaisePropertyChanged("_myList");
         }
      }

      public MainWindow()
      {
           InitializeComponent();
           _myList = new ObservableCollection<MyDataClass>();
           comboBox1.DataContext = _myList;
      }

      private void Button_Click(object sender, EventArgs e)
      {
           _myList = AnotherClass.SomeMethod();
      }

      public event PropertyChangedEventHandler PropertyChanged;
      public void RaisePropertyChanged(String _Prop)
      {
          if (PropertyChanged != null)
          {
              this.PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
          }
      }
}

Это потому, что вы фактически присваиваете значение свойству, а не обновляете ObservableCollection.
Таким образом, его нужно рассматривать как свойство, и вам нужно реализовать INotifyPropertyChanged.

И, кстати, WCF DataContracts автоматически реализует INotifyPropertyChanged.

0 голосов
/ 08 ноября 2011

хорошо, вы используете ObservableCollection, поэтому, если вы не хотите вносить изменения в INPC, вы можете очистить коллекцию и прочитать ее обратно с новыми данными.Убедитесь, что вы добавляете / удаляете из ObservableCollection в потоке GUI.Возможно, вы захотите посмотреть, как работает Dispatcher

...