1

我对 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);
    });
4

0 回答 0