繁体   English   中英

数据绑定和INotifyPropertyChanged

[英]Data Binding and INotifyPropertyChanged

我有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数据的唯一方法是在MyDataClass中实现INotifyPropertyChanged接口,或者还有另一种方法吗? 我正在寻找另一种方法,因为MyDataClass是从Web服务生成的,因此我需要创建一些适配器类以实现INotifyPropertyChanged

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。

好吧,您使用的是ObservableCollection,因此,如果您不想使用INPC,则可以清除该集合并用新数据将其读回。 确保要在GUI线程上从ObservableCollection添加/删除。 您可能想看看Dispatcher的工作原理

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM