0

有人可以指导我如何实现自定义对话框以向 UI 显示错误或简单消息并在不违反 MVVM 的情况下接收响应。我非常需要这个。请帮帮我。

谢谢,扎法尔

4

2 回答 2

3

关于您的评论,我强烈建议您仔细查看Messenger 类。它甚至提供了 GalaSoft.MvvmLight.Messaging。DialogMessage类型用于此目的。但是您可以提供自定义的子类GenericMessage<T>

您注册这样的消息并定义消息到达时应该发生的情况:

Messenger.Default.Register<DialogMessage>(this,
    dm =>
    {
        MessageBox.Show(dm.Content, dm.Caption, dm.Button, dm.Icon);
    });

虽然只有 WeakReference 保留,但如果我不想再被通知或视图被丢弃,我倾向于取消注册。永远做个好公民;)

Messenger.Default.Unregister(this);

向接收者发送消息,并可选择定义回调以取回对话结果:

Messenger.Default.Send(new DialogMessage(this, "Content",
    result => Console.WriteLine(result.ToString()))
    {
        Caption = "Caption"
        Icon = MessageBoxImage.Asterisk,
        Button = MessageBoxButton.OK
    });
于 2013-04-03T09:00:59.790 回答
0

要处理 mvvm 模式中的任何类型的对话内容,您应该使用一种 Dialog-Service。在这篇文章中,您将找到一些使用这种方法的提示。

将对话内容放入服务中可以保持 mvvm 模式不变。该服务负责对话的所有创建并提供结果。视图模型只是调用方法并订阅服务提供的事件。

以这种方式解决问题的一个好方法是使用User Interaction Patterns

就 MVVM 模式而言,视图模型负责启动与用户的交互以及消费和处理任何响应,而视图负责使用任何适当的用户体验实际管理与用户的交互。保持视图模型中实现的表示逻辑与视图实现的用户体验之间的关注点分离,有助于提高可测试性和灵活性。

在 MVVM 模式中实现这些类型的用户交互有两种常见的方法。一种方法是实现一个服务,视图模型可以使用该服务来启动与用户的交互,从而保持其对视图实现的独立性。另一种方法使用视图模型引发的事件来表达与用户交互的意图,以及绑定到这些事件并管理交互的视觉方面的视图中的组件。

这是用于执行 DialogServices 等的 MVVM 模式,因此它也符合您的要求。

于 2013-04-03T09:19:03.777 回答