我有一个mvvm应用程序,
视频模型中的:
public CommandViewModel()
{
Messenger.Default.Register<CustomerSavedMessage>(this, message =>
{
Customers.Add(message.UpdatedCustomer);
});
}
private ObservableCollection<Customer> _customers;
public ObservableCollection<Customer> Customers
{
get { return _customers; }
set
{
_customers = value;
OnPropertyChanged("Customers");
}
}
在我看来,客户必须使用组合框。
在另一个视图模型中,我在另一个线程上引发CustomerSavedMessage 当我尝试在上面的Register的处理程序委托中处理消息时 抛出notsupportedexception,并显示以下消息:
{"This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread."}
我显然需要使用Dispatcher对象进行跨线程操作, 但我无法弄清楚如何通过viewmodel完成这项工作。
我还认为框架会知道如何处理过度绑定之间的交叉线程..
如何在Dispatcher线程上执行Customers.Add(message.UpdatedCustomer)?
答案 0 :(得分:2)
您可以使用Application.Current.Dispatcher
为应用程序的主线程获取Dispatcher
或在ViewModel构造函数中捕获调度程序(Dispatcher.CurrentDispatcher
)。
例如:
Messenger.Default.Register<CustomerSavedMessage>(this, message =>
{
Application.Current.Dispatcher.Invoke(
new Action(() => Customers.Add(message.UpdatedCustomer)));
});