0

我有一个 ShellWindow,它有一个 IEventAggregator,我所有的孩子都发布到这个 IEventAggregator?。

现在我有一个名为 JIMSMessage 的静态类,我在其中发布到 ShellViewModel 的 IEventAggregator。

public static class JIMSMessage
{
    public static bool Show(IEventAggregator _events, string message)
    {
        _events.Publish(new Message()
        {
            MessageValue = message
        });

        return true;
    }        
}

我希望 Show 方法的返回值来自调用此方法的 ViewModel。

可以说...

我有一个名为 LedgerViewModel 的 ViewModel,它调用 JIMSMessage.Show 如下,

JIMSMessage.Show(_events,"Enter Ledger Name.");

它的工作,但我的 MessageWindowViewModel 返回一些东西,我想返回到 JIMSMessage 类,我该怎么做。请帮我。

4

1 回答 1

2

我不认为这EventAggregator真的是为了那样工作。它用于向关心接收这些事件的任何人发布事件,或者如果有兴趣收到有关事件的警报,则用于订阅事件。

它并不意味着用于在同一方法中进行调用并等待返回值。

您可以做的是发布类似ShowMessage事件的内容,然后订阅以接收MessageShown事件。

例如,您ShellViewModel可能订阅接收 MessageDisplayed 事件消息并像这样处理它们:

public ShellViewModel(IEventAggregator events)
{
    // Subscribe to MessageDisplayed events
    events.GetEvent<MessageDisplayedEvent>().Subscribe(HandleMessageDisplayed);
}

void HandleMessageDisplayed(MessageDisplayedEvent e)
{
    if (e.SomeBooleanProperty)
        // Do Work
}

在您的应用程序的其他地方,您可以发布 ShowMessage 事件以显示消息

// Broadcast an Event
_events.GetEvent<ShowMessageEvent>().Publish(
    new ShowMessageEvent{ Message = "Enter Ledger Name." });

任何负责显示消息的类都会订阅接收ShowMessageEvent、显示消息、等待用户反馈,然后MessageDisplayed在完成时广播一个带有结果的事件。

此外,如果您有兴趣,我为 EventAggregator 编写了一个静态类,它使处理 PRISMEventAggregator变得更加简单。您可能有兴趣检查一下。

于 2012-09-24T19:36:13.463 回答