Источник -> Проверка привязки цели (WPF) - PullRequest
0 голосов
/ 27 октября 2011

Если у меня есть элемент управления WPF, связанный с источником данных, и для ValidatesOnExceptions установлено значение true для объекта Binding.Теперь, если я напишу в элементе управления что-то, что не может быть преобразовано в тип данных источника, я получу ошибку проверки и красную рамку для моего элемента управления.

Но если я установлю несовместимое значение в источнике,исключение автоматически перехватывается в привязке и возвращается значение по умолчанию.Нет указаний на то, что значение в элементе управления нельзя доверять из-за ошибки привязки.

Как я могу визуализировать проблемы привязки для пользователя , независимо от того, какая сторона является причинойЭто?Я хочу, чтобы пользователь знал, что значение в элементе управления не является надежным.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Это то, что у меня есть в след.Это говорит мне, что OverflowException генерируется во время преобразования (потому что 99999 не вписывается в Int16).Тогда он просто использует 0 вместо 99999 при установке значения на цель.Это нормально, я не ожидаю, что это сделает невозможное.Проблема в том, что это не дает мне возможности действовать на ошибку , и нет ошибок для проверки.

Получено событие PropertyChanged из DataClass (hash = 2616333)
GetValue на уровне 0 из DataClass (хэш = 2616333) с использованием RuntimePropertyInfo (Int32): '99999'
TransferValue - получено необработанное значение '99999'
В mscorlib возникла исключительная ситуация первого типа типа System.OverflowException.dll System.Windows.Data Ошибка: 6: преобразователю «SystemConvertConverter» не удалось преобразовать значение «99999» (тип «Int32»);будет использоваться запасное значение, если оно доступно.BindingExpression: Path = Int32;DataItem = 'DataClass' (HashCode = 2616333);целевой элемент - «AliasClass» (HashCode = 32866918);Свойство target - Int16 (тип Int16). OverflowException: 'System.OverflowException: значение было слишком большим или слишком маленьким для Int16.
TransferValue - неявный преобразователь, созданный {DependencyProperty.UnsetValue}
TransferValue - использованиеотступление / значение по умолчанию '0'
TransferValue - использование окончательного значения '0'

1 Ответ

0 голосов
/ 27 октября 2011

Для визуализации проблем связывания я знаю 2 способа:

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 ошибки привязки в ваших представлениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...