我有一个 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");
}
}
在我看来,客户被绑定到一个组合框。
在不同的视图模型中,当我尝试处理 Register 的处理程序委托中的消息时,我在不同的线程上引发了 CustomerSavedMessage,上面抛出了一个不支持的异常,并带有以下消息:
{"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) ?