所以这里是场景。我有一个开始下载数据的按钮。当我的方法完成后,我希望我的所有viewModel都能得到通知,而无需输入视图,并可以使用下载的数据正确填充其属性。如何实现这个无痛人流?通知我的ViewModels异步事件已完成
private ICommand loadDataCommand;
public MyViewModel()
{
this.loadDataCommand = new DelegateCommand(this.LoadDataAction);
}
public ICommand LoadDataCommand
{
get
{
return this.loadDataCommand;
}
}
private void LoadDataAction(object p)
{
this.MyViewModelDataSource.Clear();
foreach (MyT mt in GlobalThings.MyTypeCollection)
{
this.MyViewModelDataSource.Add(tt);
}
}
所以这是我的视图模型,并且是为了填补数据,我写的命令,但我不能把它当我下载方式结束,因为我需要让我的ViewModel和我的一个实例不想要..也许某种通知到viewModels?
编辑: 我做了你的建议,这里是结果:
视图模型
public MyViewModel()
{
Messenger.Default.Register<MyType>
(
this,
(action) => ReceiveMessage(action)
);
}
private void ReceiveMessage(MyType action)
{
this.MyViewModelDataSource.Clear();
foreach (MyT mt in GlobalDeclarations.MyTypeCollection)
{
this.MyViewModelDataSource.Add(tt);
}
}
哪里下载方法是在它,我在结尾处加上类:
Messenger.Default.Send<MyType>(GlobalDeclarations.MyTypeCollection);
}
但它告诉我:
应用程序调用这是整理了 不同的线程
在这条线的接口: “this.MyViewModelDataSource.Clear();”
所以我。发送()我的全球MyTypeCollection对象结束下载方法?但是这个注册的东西是在ViewModel的构造函数中完成的? –
2014-10-31 14:27:12
是在构造函数中,请参阅编辑,将真正帮助你.. – loop 2014-10-31 14:28:03
任何想法为什么在ReceiveMessage方法,当我尝试插入一些代码它告诉我: “类型'System.Runtime.InteropServices的异常。 COMException'发生在mscorlib.ni.dll中,但未在用户代码中处理 附加信息:应用程序调用了针对不同线程进行编组的接口(即从HRESULT异常:0x8001010E(RPC_E_WRONG_THREAD))“ 即使当我把它放在 Application.Current.Resources.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,()=> ...); – 2014-11-03 09:30:48