我有一个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");
}
答案 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。