来源 - >目标绑定验证(WPF)

时间:2011-10-27 12:29:13

标签: wpf validation binding

如果我将WPF控件绑定到数据源并在Binding对象上将ValidatesOnExceptions设置为true。现在,如果我在控件中写了一些无法转换为源数据类型的内容,我将在控件上出现验证错误和红色边框。

但是如果我在源上设置了一个不兼容的值,则会在绑定中隐藏异常,并返回一个默认值。由于绑定错误,没有迹象表明控件中的值不可信任。

如何将绑定问题可视化为用户,无论哪一方是它的原因?我希望用户知道控件中的值不可靠。

更多信息:

这就是我追踪的内容。它告诉我在转换期间抛出了OverflowException(因为99999不适合Int16)。然后,当在目标上设置值时,它只使用0而不是99999。没关系,我不指望它做不可能的事。问题是它没有让我选择对错误采取行动,并且没有找到验证错误。

从DataClass获得PropertyChanged事件(hash = 2616333)
使用RuntimePropertyInfo(Int32)从DataClass(hash = 2616333)获取级别0的GetValue:'99999'
TransferValue - 原始值'99999'
mscorlib.dll中发生了'System.OverflowException'类型的第一次机会异常     System.Windows.Data错误:6:'SystemConvertConverter'转换器无法转换值'99999'(类型'Int32');如果可用,将使用后备值。 BindingExpression:路径=的Int32; DataItem ='DataClass'(HashCode = 2616333); target元素是'AliasClass'(HashCode = 32866918);目标属性是'Int16'(类型'Int16')OverflowException:'System.OverflowException:对于Int16,值太大或太小。
TransferValue - 隐式转换器生成{DependencyProperty.UnsetValue}
TransferValue - 使用回退/默认值'0'
TransferValue - 使用最终值'0'

1 个答案:

答案 0 :(得分:0)

为了可视化绑定问题,我知道有两种方法:

1)创建一个只返回值的IValueConverter,并检查该值 这对于确保传递的变量是您想要的变量特别有用 它是这样的:

 public class BindingTestConverter : IValueConverter, IMultiValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region IMultiValueConverter Members

        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return values;
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }

2)使用PresentationTraceSource:

<UserControl (...) PresentationTraceSources.TraceLevel="High" (...) />

这将在visual studio的“输出窗口”中显示视图中的绑定错误。