WPF - 如何从视图而不是viewmodel显示自定义异常

时间:2013-04-16 06:15:49

标签: c# wpf mvvm

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

根据以下代码,我从视图模型catch块调用CustomMessageBox.Show()。 如何从CustomMessageBox.Show()xaml.cs致电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");
  }

2 个答案:

答案 0 :(得分: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是一个自定义类,包含有关需要向用户显示的异常的任何详细信息。

答案 1 :(得分:0)

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