Почему я получаю DependencyProperty. UnsetValue при преобразовании значения в MultiBinding?

У меня есть чрезвычайно простой IMultiValueConverter что просто два значения OR. В примере ниже, я хочу инвертировать первое значение с помощью одинаково простого булева инвертора.

<MultiBinding Converter="{StaticResource multiBoolToVis}">
    <Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
    <Binding Path="ConditionB"/>
</MultiBinding>

и инвертор:

public class BoolInverterConverter : IValueConverter
{
    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is bool)
        {
            return !((bool)value);
        }
        return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
    #endregion
}

Когда я включаю boolInverter, первое значение в MultiValueConverter становится "DependencyProperty. UnsetValue". Нет никаких проблем, когда я не использую преобразователь (кроме не логика, я стремлюсь, конечно).

Я пропускаю что-то? Продвижение через отладчик показывает, что InverseBoolConverter правильно инвертирует значение, я передаю его, но что значение затем 'не отправляется' MultiValueConverter.

28
задан Askolein 23 February 2017 в 09:57
поделиться

1 ответ

Из MSDN:

UnsetValue - это контрольное значение, которое используется в сценариях, где система свойств WPF не может определить запрошенное значение DependencyProperty. Используется UnsetValue, а не пустая ссылка (Nothing в Visual Basic), поскольку пустая ссылка может быть допустимым значением свойства, а также допустимым (и часто используемым) DefaultValue.

Это означает одно из следующих событий:

  • Вы используете шаблон ( ControlTemplate или DataTemplate ), и значение не имеет источника данных, установленного на момент создания Загружено. Таким образом, он дважды попадет в ваш конвертер, сначала с UnsetValue, а затем с логическим значением; так что беспокоиться не о чем;
  • Ваше Binding неверно, то есть Binding не может определить значение, что приводит к UnsetValue .. Вероятно, вы должны увидеть предупреждение ..

Кроме того, вы не можете комбинируйте конвертеры, как вы ... Так что это, наверное, так.

Удалите конвертер во внутреннем переплете, и он должен быть исправлен! :)

Надеюсь, это поможет!

32
ответ дан 28 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: