wpf绑定:调用线程无法访问此对象,因为其他线程拥有它
从视图模型属性引发NotifyPropertyChange事件后,我遇到此错误 作为测试,我在setter上添加了一个UI Dispatcher.Invoke调用,似乎暂时解决了这个问题wpf绑定:调用线程无法访问此对象,因为其他线程拥有它,wpf,multithreading,Wpf,Multithreading,从视图模型属性引发NotifyPropertyChange事件后,我遇到此错误 作为测试,我在setter上添加了一个UI Dispatcher.Invoke调用,似乎暂时解决了这个问题 public FeedTrackingSummary SelectedFeedTracking { get { return _selectedFeedTracking; } set { Application.Current.Dispatcher
public FeedTrackingSummary SelectedFeedTracking {
get { return _selectedFeedTracking; }
set {
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => {
_selectedFeedTracking = value; Notify("SelectedFeedTracking");
}));
}
}
下面的SelectedFeedTracking是通过选择绑定到此属性的下拉值来设置的:
<ComboBox... SelectedItem="{Binding SelectedFeedTracking}" />
一些MVVM框架(例如Caliburn.Micro)有一个基本的NotifyPropertyChanged
类,该类自动将属性更改通知(通过引发PropertyChanged
事件)封送到所谓的“UI线程”
因此,不要在每个属性设置器上调用Application.Current.Dispatcher.Invoke
(…),而是将该代码放在Notify()
方法中。因此,确保每次在ViewModel中通知属性更改时都在UI线程中进行。一些MVVM框架(例如Caliburn.Micro)有一个基本的NotifyPropertyChanged
类,该类自动将属性更改通知封送(通过引发PropertyChanged
事件)到所谓的“UI线程”
因此,不要在每个属性设置器上调用Application.Current.Dispatcher.Invoke
(…),而是将该代码放在Notify()
方法中。因此,确保每次在ViewModel中通知属性更改时都在UI线程中这样做
set {
SelectedCalc = -1;
}