我正在尝试使用WPF和MVVM模式构建应用程序。我完全通过数据绑定从我的ViewModel中填充了我的视图。我希望有一个中心位置来处理我的应用程序中发生的所有异常,以便我可以通知用户并适当地记录错误。
我知道Dispatcher.UnhandledException,但这不能完成工作,因为在数据绑定期间发生的异常会记录到输出窗口。因为我的View被数据绑定到我的ViewModel,所以整个应用程序几乎都是通过数据绑定来控制的,所以我无法记录我的错误。
有没有办法一般地处理数据绑定期间引发的异常,而不必在我的所有ViewModel公共文件周围放置try块?
示例视图:
<Window x:Class="Test.TestView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestView" Height="600" Width="800"
WindowStartupLocation="CenterScreen">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Window.Resources>
<StackPanel VerticalAlignment="Center">
<Label Visibility="{Binding DisplayLabel, Converter={StaticResource BooleanToVisibilityConverter}}">My Label</Label>
</StackPanel>
</Window>
ViewModel:
public class TestViewModel
{
public bool DisplayLabel
{
get { throw new NotImplementedException(); }
}
}
这是一个内部应用程序,所以我不想像以前推荐的那样使用Wer。
答案 0 :(得分:2)
Binding实现旨在实现容错,因此可以捕获所有异常。您可以做的是激活绑定中的以下属性:
另请参阅MSDN。
这会导致在绑定控件上引发附加的Error属性。
但是,此基础结构旨在验证用户输入并显示验证消息。我不确定这是不是你在做什么。