[英]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.