我对MVVM Light消息传递有一个奇怪的问题。我通过我的应用程序使用它,它工作得很好。我现在遇到的问题是,在我尝试发送消息时,我的消息大约有10%被收到。我假设它在90%的时间内被击落而被遗忘,我没有收到任何错误,我的申请就像没有发生任何事情一样。
我所拥有的是具有状态集合的视图中的上下文菜单。每个用户都有一个状态,您可以通过此上下文菜单进行更改。每次状态更改时,我都需要将消息广播到另一个视图模型。这是失败的消息。这是一些代码,如果对您来说不够清楚,请随时向我提出更多问题。
这位于我的构造函数中,从上下文菜单项点击:
this.UpdateUserStatus = new RelayCommand<UserStatusVM>(x =>
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
UpdateStatus(x);
}));
来自relay命令的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);
});