使用WPF和MVVM处理异常

时间:2009-10-09 08:44:24

标签: wpf mvvm exception-handling

我正在尝试使用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。

1 个答案:

答案 0 :(得分:2)

Binding实现旨在实现容错,因此可以捕获所有异常。您可以做的是激活绑定中的以下属性:

  • ValidatesOnExceptions = true
  • NotifyOnValidationError = true

另请参阅MSDN

这会导致在绑定控件上引发附加的Error属性。

但是,此基础结构旨在验证用户输入并显示验证消息。我不确定这是不是你在做什么。