C#的简单绑定:
Binding binding = new Binding(SourceName);
binding.Mode = BindingMode.TwoWay;
BindingExpressionBase beb = SetBinding(SourceDependencyProperty, binding);
我想检测SetBinding是否成功。 SetBinding显然知道它何时出现问题,因为它在应用程序运行时显示在“输出”窗口中跟踪:
System.Windows.Data错误:BindingExpression路径错误:'Tc.Views.TestAccount'上找不到'InterestRate'属性...
BindingExpressionBase看起来与我相同,SetBinding()是成功还是失败,并且没有抛出异常。我也为绑定通知标志尝试了不同的值。
答案 0 :(得分:2)
我建议你使用Karl Shiflett的Glimpse for Silverlight。 GlimpseService公开了一个API,允许您手动处理任何绑定异常。
基本技术相当简单 - 监听Application.UnhandledException和Application.RootVisual.BindingValidationError,你应该能够拦截绑定错误。
答案 1 :(得分:1)
非常艰难的一个。我不得不考虑它,但我不喜欢你的答案(不是它不是42)。
严格的答案是没有。然而,有一个可怕的一次性解决方案坦率地说我不推荐,但如果它绝对不可避免可能有用。首先,您需要一个值转换器: -
public class ConvertibleValueConverter : IValueConverter
{
public bool Converted { get; private set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Converted = true;
return ((IConvertible)value).ToType(targetType, culture);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((IConvertible)value).ToType(targetType, culture); ;
}
}
现在您可以按如下方式修改源代码: -
Binding binding = new Binding(SourceName);
binding.Mode = BindingMode.TwoWay;
binding.Converter = new ConvertibleValueConverter();
BindingExpressionBase beb = SetBinding(SourceDependencyProperty, binding);
if (!((ConvertibleValueConverter)binding.Converter).Converted)
{
// Path SourceName was not found.
}
此代码假定已有适当的DataContext。 Converter仅处理实现IConvertible(String,Int,Double,DateTime等)的基本系统类型之间的典型转换。它起作用,因为Convert
只有在找到属性路径时才会被调用。
答案 2 :(得分:0)
您可能想要检查this。它特定于WPF,但也应该与Silverlight最相关,并且可能会给你一些关于如何捕获这些问题的想法。