![](/img/trans.png)
[英]Referencing ViewModel from View's DataContext Prevents XAML Designer edits
[英]Exceptions from MainWindowViewModel c'tor appearing to be 'masked' by setting MainWindow DataContext (it's ViewModel) in XAML
在 WPF 項目中,它的MainWindow
的DataContext
設置在 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
。
您可以通過不同的方式緩解此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.