У меня есть чрезвычайно простой 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.
Из MSDN:
UnsetValue - это контрольное значение, которое используется в сценариях, где система свойств WPF не может определить запрошенное значение DependencyProperty. Используется UnsetValue, а не пустая ссылка (Nothing в Visual Basic), поскольку пустая ссылка может быть допустимым значением свойства, а также допустимым (и часто используемым) DefaultValue.
Это означает одно из следующих событий:
ControlTemplate
или DataTemplate
), и значение не имеет источника данных, установленного на момент создания Загружено. Таким образом, он дважды попадет в ваш конвертер, сначала с UnsetValue, а затем с логическим значением; так что беспокоиться не о чем; Binding
неверно, то есть Binding не может определить значение, что приводит к UnsetValue .. Вероятно, вы должны увидеть предупреждение .. Кроме того, вы не можете комбинируйте конвертеры, как вы ... Так что это, наверное, так.
Удалите конвертер во внутреннем переплете, и он должен быть исправлен! :)
Надеюсь, это поможет!