wpf 我可以在XAML中处理抛出的异常吗?

blmhpbnm  于 2022-11-26  发布在  其他
关注(0)|答案(4)|浏览(201)

在我的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>

像上面的代码一样的东西是可能的吗?

2exbekwf

2exbekwf1#

首先,我认为捕获XAML异常的目的并不在于此。它们更多地是作为一种工具存在的,以帮助开发人员了解他们需要如何修复XAML代码,尽管由于XAML标记的动态特性,它们当然必须在运行时(初始化)发生
也就是说,通过将对InitializeComponents的调用 Package 在Windows类的构造函数中,可以很容易地处理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
        }
    }
}
de90aj5v

de90aj5v2#

如果发生错误,您可以使用FallBackValue来提供一个值,以便在绑定中使用。除了使用FallBackValue之外,您无法在xaml中处理异常。
您可能还想查看TargetNullValue,它使某个值等效于Null(例如,如果您设置TargetNullValue=5,而您的用户输入5,则setter将获得Null,如果getter提供Null,则绑定将显示5)。

a11xaf1n

a11xaf1n3#

我的第一个想法是,可以使用ValueConverter,检查value==null,然后通过一个转换器参数设置视图模型的某个任意属性,然后在xaml中使用一个常规属性触发器来显示错误。
我很肯定你也可以用绑定验证器来做这件事,所以我会先看看那里。

编辑:是的,看一看http://msdn.microsoft.com/en-us/library/ms753962.aspx,了解绑定验证规则的简介,..这将使您走上正确的道路

des4xlb0

des4xlb04#

是,您可以使用XAML处理异常它存在于未处理异常中此链接可能会有所帮助.. http://www.wpf-tutorial.com/wpf-application/handling-exceptions/

相关问题