c# – 我可以处理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,无论您找到合适的.

this blog post的示例:

public partial class Window1 : System.Windows.Window 
{
    public Window1()
    {
        try
        {
            InitializeComponent();
        }
        catch (Exception ex)
        {
            // Log error (including InnerExceptions!)
            // Handle exception
        }
    }
}

转载注明原文:c# – 我可以处理XAML中抛出的异常吗? - 代码日志