WPF - 如何从视图而不是视图模型显示自定义异常
Posted
技术标签:
【中文标题】WPF - 如何从视图而不是视图模型显示自定义异常【英文标题】:WPF - How to display the cutom exception from view insted of viewmodel 【发布时间】:2013-04-16 06:15:48 【问题描述】:我有一个 WPF MMVM 应用程序,我们正在从 viewmodel 方法获取 xml 解析器异常。但问题是我不想从视图模型中显示异常。我想从视图显示消息(CustomMessageBox.Show()
从视图调用)
根据下面的代码,我从视图模型 catch 块中调用 CustomMessageBox.Show()
。
如何从xaml.cs
或xaml
呼叫CustomMessageBox.Show()
?
我们如何通知视图并调用CustomMessageBox.Showfrom
视图?此代码 sn-p 在 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");
【问题讨论】:
@wizzardz 您的编辑没有添加任何实质性内容,帖子很好。你所做的只是搞砸了缩进。回滚。 也许您可以在抛出异常时在您的 ViewModel 中设置一个属性,并在您的 View 本身中绑定到该属性。 你的 MVVM 实现是否包含某种Messenger
类?
我想从视图模型的视图调用 CustomMessageBox.Show。已实现自定义消息框 --> 自定义消息框:窗口。我如何通知 viewmodel wxception 来查看?我们没有实现任何 Messenger 类
【参考方案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 是一个自定义类,包含您需要向用户显示的有关异常的任何详细信息。
【讨论】:
我能知道我们如何通过事件聚合器实现这一点吗? 我知道我们可以通过事件聚合器实现上述目标吗? 如果你没有使用像 Prism 或 Caliburn Micro 这样的框架,这里有一个名为Roll Your Own Simple Message Bus / Event Aggregator的帖子【参考方案2】:您可以使用ValueConverter
创建一个模态Popup
与ViewModel 属性ErrorMessage
的可见性绑定,该ValueConverter
在给定的源不为null 或为空时返回true。
【讨论】:
以上是关于WPF - 如何从视图而不是视图模型显示自定义异常的主要内容,如果未能解决你的问题,请参考以下文章