在我的 XAML 中,我通过绑定到 GetAll 属性来获取所有客户:
<ListBox ItemsSource="{Binding GetAll}"
ItemTemplate="{StaticResource allCustomersDataTemplate}"
Style="{StaticResource allCustomersListBox}">
</ListBox>
GetAll 属性是我的视图模型中的一个可观察集合,它调用模型来获取所有客户集合:
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 标记的动态性质,它们当然必须在运行时(初始化)发生
也就是说,您可以通过将调用包装起来来轻松处理 XAML 异常InitializeComponents
在你的构造函数内Windows
班级。然后您可以捕获所有异常或专门XamlParseException
,无论您认为合适。
示例来自这篇博文 https://web.archive.org/web/20200809032534/http://geekswithblogs.net/lbugnion/archive/2007/03/14/108728.aspx:
public partial class Window1 : System.Windows.Window
{
public Window1()
{
try
{
InitializeComponent();
}
catch (Exception ex)
{
// Log error (including InnerExceptions!)
// Handle exception
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)