我有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
答案 0 :(得分:1)
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。
答案 1 :(得分:0)
好吧,你正在使用ObservableCollection,所以如果你不想实施INPC,那么你可以清除该集合并用新数据重新读回。确保在GUI线程上添加/删除ObservableCollection。您可能想看看Dispatcher的工作原理