我需要让数据绑定期间发生的异常冒泡并且不被WPF吞没。通常这个错误在输出中就足够了,但在我的情况下我需要让它冒泡。
我有一个如下定义的属性:
public string Text
{
get
{
return (string)GetValue(TextProperty);
}
set
{
SetValue(TextProperty, value);
}
}
public static readonly DependencyProperty TextProperty = DependencyProperty.Register(nameof(Text), typeof(string), typeof(EntitySearch), new PropertyMetadata(string.Empty, TextChangedCallback));
public static void TextChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (DesignerProperties.GetIsInDesignMode(d))
return;
if (d is EntitySearch es)
{
es.m_key = e.NewValue;
object obj = es.m_context.Set(es.m_entityType).Find(e.NewValue);
if (obj.IsEmpty())
throw new Exception("Entity with this key does not exist.");
es.SelectedObject = obj;
}
}
这是输入控件的常用Text属性,但在我的情况下,此值用作从数据库中获取内容的键。正如你所看到的,我想在这里抛出异常并让异常泡沫化。最终,堆栈中的某个人将处理异常并将其显示给用户。
有什么建议吗?
我想要注意,如果可能的话,我会保留抛出异常的概念,而不是将某些属性设置为false,然后再以某种MVVM方式处理此属性。