簡體   English   中英

通過在 XAML 中設置 MainWindow DataContext(它是 ViewModel),來自 MainWindowViewModel c'tor 的異常似乎被“屏蔽”了

[英]Exceptions from MainWindowViewModel c'tor appearing to be 'masked' by setting MainWindow DataContext (it's ViewModel) in XAML

在 WPF 項目中,它的MainWindowDataContext設置在 XAML 中,如下所示:

<Window.DataContext>
    <viewModels:MainWindowViewModel />
</Window.DataContext>

現在,在MainWindowViewModel的構造函數中運行了一些代碼。 在極少數情況下,例如,當存在連接問題時,此代碼會生成Exception (我們稱其為原始異常)。

當發生此類Exception時,此異常似乎被另一個異常替換,告訴我MainWindowViewModel的構造函數中存在問題,這是在App.xaml.cs級別的全局錯誤處理程序中收到的異常.

我需要的是讓我的全局錯誤處理程序接收到原始Exception

我不知道,但我感覺原始異常被屏蔽/替換,因為MainWindowViewModel是在 XAML 中聲明的,而不是在代碼中?

那么,是否有人對我如何讓我的全局錯誤處理程序接收MainWindowViewModel的 c'tor 中生成的異常有任何建議。

為了完整起見,我的全局錯誤處理程序在App.xaml.cs中實現:

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
    }

    private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
    {

        // Show Dialog with error message.
    }

如果您在 XAML 中設置數據上下文,則在解析視圖時會實例化相應的視圖 model。 如果您的視圖 model 構造函數拋出異常,例如ConnectionException ,則 XAML 解析也會失敗,並將此異常包裝在XamlParseException中。

因此,在您未處理的異常處理程序中, e.Exception將包含XamlParseException並且其InnerException屬性將包含您的ConnectionException

您可以通過不同的方式緩解此問題。

  • 遍歷或過濾整個異常樹來處理和處理目標異常
  • 提前創建視圖model,根據結果實例化視圖
  • 將連接設置移動到方法或服務並在查看 model 構造后調用它
  • XAML 解析后顯式設置數據上下文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM