[英]Can I handle thrown exceptions in XAML?
在我的XAML中,我通過綁定到GetAll屬性來獲得所有客戶:
<ListBox ItemsSource="{Binding GetAll}"
ItemTemplate="{StaticResource allCustomersDataTemplate}"
Style="{StaticResource allCustomersListBox}">
</ListBox>
GetAll屬性是我的視圖模型中的一個可觀察集合,它調用Model來獲取所有客戶集合:
public class CustomersViewModel
{
public ObservableCollection<Customer> GetAll {
get
{
try
{
return Customer.GetAll;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}
如果模型中出現任何問題(格式錯誤的XML文件等),則異常會一直冒泡到ViewModel中的GetAll屬性。
第一個問題:我很驚訝XAML似乎沒有對異常做任何事情,只是繼續並且什么都不顯示。 這是設計的嗎? 這是“脫鈎方法”的一部分嗎?
第二個問題:這使我認為我可以在某種程度上處理XAML中的異常 ,例如
偽代碼:
<Trigger>
<Trigger.OnException>
<TextBox Text="The customer data could not be loaded."/>
</Trigger.OnException>
</Trigger>
是否可能像上面的代碼?
首先,我認為不應該捕獲XAML異常。 它們更多地作為一種工具來幫助開發人員了解他們如何修復他們的XAML代碼,盡管由於XAML標記的動態特性,它們當然必須在運行時(初始化)發生。
這樣說,您可以通過在Windows
類的構造函數中包含對InitializeComponents
的調用來輕松處理XAML異常。 然后,您可以捕獲所有異常或特別是XamlParseException
,無論您找到合適的。
此博客文章的示例:
public partial class Window1 : System.Windows.Window
{
public Window1()
{
try
{
InitializeComponent();
}
catch (Exception ex)
{
// Log error (including InnerExceptions!)
// Handle exception
}
}
}
如果發生錯誤,您可以使用FallBackValue提供在綁定中使用的值。 除了使用FallBackValue之外,您無法處理xaml中的異常。
您可能還想查看TargetNullValue ,它使得某個值等於Null(例如,如果您設置TargetNullValue = 5並且您的用戶輸入5,則您的setter將獲得Null,如果您的getter提供Null,則綁定將顯示5)。
我的第一個想法是你可以使用ValueConverter
,檢查value==null
然后通過converter參數設置視圖模型的一些任意屬性。 然后,您可以在xaml中使用常規屬性觸發器來顯示錯誤。
我很確定你也可以用綁定驗證器做到這一點,所以我先看看那里。
編輯:是的,請查看http://msdn.microsoft.com/en-us/library/ms753962.aspx獲取綁定驗證規則的介紹,...這將使您走上正確的道路
是的,您可以使用XAML處理異常。 它存在未處理的異常。 這個鏈接可能會有所幫助.. http://www.wpf-tutorial.com/wpf-application/handling-exceptions/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.