我正在使用MVVM Light并使用Message在ViewModels之间进行通信,让ViewModel知道何时可以执行某些操作.我的问题是我注册了一条消息,然后它多次收到它.所以为了防止我的程序多次执行某些事情,我必须创建一个布尔标志来查看它是否已被收到.知道为什么会这样做以及如何阻止它?
一旦不再需要,请确保取消注册消息处理程序.Messenger保留对已注册方法的引用,这可以防止它们被垃圾回收.
因此,对于ViewModels:确保在完成后调用Cleanup(或实现IDisposable并从那里调用Cleanup).
对于视图(控件,Windows或类似),在视图拆除时发生的事件中调用Messenger.Unregister,例如Unloaded事件.
这是MVVM的已知行为,并已在多个地方进行了讨论.
很老的问题,但我通过这样做解决了这个问题:
static bool isRegistered = false;
然后,在构造函数中:
if( !isRegistered )
{
Messenger.Default.Register<MyMessage>(this, OnMessageReceived);
isRegisterd = true;
}
Run Code Online (Sandbox Code Playgroud)
我以前见过这个问题。这与 Messenger.Default.Register 被多次调用有关。MVVMLight Messenger 类将注册相同的项目“x”次。这就是为什么当您调用 Send 时会多次收到它。
有人知道如何防止 MVVMLight 多次注册吗?
归档时间: |
|
查看次数: |
4420 次 |
最近记录: |