2009-10-09 85 views
3

我正在尝试使用WPF和MVVM模式构建应用程序。我的视图是纯粹通过数据绑定从ViewModel填充的。我希望有一个中心位置来处理发生在我的应用程序中的所有异常,以便我可以通知用户并适当地记录错误。处理WPF和MVVM的异常

我知道Dispatcher.UnhandledException,但是这不会做作为数据绑定期间发生的异常记录到输出窗口的工作。因为我的View是绑定到我的ViewModel的,所以整个应用程序几乎都通过数据绑定来控制,所以我没有办法记录我的错误。

有没有办法一般地处理在数据绑定期间引发的异常,而不必在我的所有ViewModel公共模块上放置try块?

示例View:

<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> 

视图模型:

public class TestViewModel 
{ 
    public bool DisplayLabel 
    { 
     get { throw new NotImplementedException(); } 
    } 
} 

这是一个内部应用程序,所以我不想用疫情周报,因为我已经看到了以前推荐。

+0

请参阅此问题和答案:http://stackoverflow.com/questions/2171580/exceptions-are-swallowed-in-my-wpf-application-how-to-force-application-to-crash – 2010-02-28 21:41:45

回答

1

绑定实现被设计为容错,因此它捕获所有的异常。你可以做的是在你的绑定激活以下属性:

  • ValidatesOnExceptions =真
  • NotifyOnValidationError =真

又见MSDN

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

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