我对 MVVM Light 消息传递有一个奇怪的问题。我通过我的应用程序使用它,它运行良好。我现在遇到一个问题,我的消息在我尝试发送的时间中大约有 10% 被接收。我假设它会在另外 90% 的时间里被遗忘,并且我没有收到任何错误,我的应用程序继续进行,就好像什么都没发生一样。
我所拥有的是具有状态集合的视图中的上下文菜单。每个用户都有一个状态,您可以通过此上下文菜单更改它。每次状态发生变化时,我都需要将消息广播到另一个视图模型。这是失败的消息。这是一些代码,如果这对您来说不够清楚,请随时问我更多问题。
这位于我的构造函数中,从上下文菜单项单击触发:
this.UpdateUserStatus = new RelayCommand<UserStatusVM>(x =>
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
UpdateStatus(x);
}));
中继命令中的 UpdateStatus 方法:
private void UpdateStatus(UserStatusVM status)
{
var userStatusEventId = _userService.CreateUserEvent(status.Id, CurrentUser.Id);
//This returns a business object that I would like to send
//over the wire to the other view model
var userEvent = _userService.GetUserEvent(userStatusEventId);
if (userEvent != null)
{
Messenger.Default.Send<UserEvent>(userEvent, "Broadcast");
}
//These fire off a collection changed event
CurrentUser.StatusId = status.Id;
CurrentUser.Status = status.Name;
CurrentUser.UpdatedDate = DateTime.Now;
CurrentUser.IsOnDuty = UserStatuses.IsOnDuty(status.Id);
}
以及另一个视图模型中的消息接收:
Messenger.Default.Register<UserEvent>(this, "Broadcast", (userEvent) =>
{
proxy.Invoke("NewUserEvent", userEvent);
});