1

我有一个 WPF MMVM 应用程序,我们正在从 viewmodel 方法获取 xml 解析器异常。但问题是我不想从视图模型中显示异常。我想从视图显示消息(从视图CustomMessageBox.Show()调用)

根据下面的代码,我CustomMessageBox.Show()从视图模型 catch 块中调用。我如何CustomMessageBox.Show()xaml.csor拨打电话xaml

我们如何通知视图并调用CustomMessageBox.Showfrom视图?此代码片段在 WPF 命令中调用。

当前实施:

try
{
  var xamlReader = XamlReader.Parse(xamlText);
  var gb = modelTemplate.GetGraphicalObject("Icons");
  var strings = new Dictionary<string, string> { { "Default", xamlText } };
  gb.UpdateGraphicalObject(strings, null, null);
  if (xamlReader != null)
  {
    var view = new Viewbox();
    view.Child = (UIElement)xamlReader;
    view.Stretch = Stretch.Uniform;
    modelVM.Icon = view;
    }
  }
  catch (XamlParseException)
  {
    CustomMessageBox.Show("Invalid XAML file specified.", Properties.Resources.NextGenSim, MessageBoxButton.OK, MessageBoxImage.Error);
    //throw new XamlParseException("Invalid XAML file specified");
  }
4

2 回答 2

1

如果您使用信使/事件聚合器(例如 MVVM Light),您可以将包含异常详细信息的消息从视图模型发送到视图,当收到该消息时,可以触发消息框显示。

使用MVVM Light,它可能如下所示:

视图模型:

Messenger.Default.Send(new ErrorMessage("Invalid XAML file specified.",
                       Properties.Resources.NextGenSim));

看法

Messenger.Default.Register<ErrorMessage>(this, message =>
    {
        CustomMessageBox.Show(message.Message, message.Details, 
                              MessageBoxButton.OK, MessageBoxImage.Error);
    }

ErrorMessage 是一个自定义类,包含有关您需要向用户显示的异常的任何详细信息。

于 2013-04-16T07:13:48.817 回答
0

您可以创建一个Popup具有与 ViewModel 属性的可见性绑定的模式,当给定的源不为 null 或为空时ErrorMessage,使用它返回 true。ValueConverter

于 2013-04-16T09:24:48.350 回答