为什么在MultiBinding中转换值时会得到DependencyProperty.UnsetValue?

我有一个非常简单的IMultiValueConverter,它只是OR的两个值。 在下面的示例中,我想使用同样简单的布尔型逆变器反转第一个值。

    

和逆变器:

 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是一个sentinel值,用于WPF属性系统无法确定请求的DependencyProperty值的场景。 使用UnsetValue而不是null引用(在Visual Basic中为Nothing),因为null引用可以是有效的属性值,也可以是有效(且经常使用)的DefaultValue。

这意味着以下之一:

  • 您使用模板( ControlTemplateDataTemplate ),并且该值在加载时没有设置DataSource。 所以它会两次击中你的转换器,首先是UnsetValue,第二个是布尔值; 所以没什么好担心的;
  • 您的Binding不正确,这意味着绑定无法确定值,从而导致UnsetValue ..您应该可能会看到警告..

此外,你不能像你一样组合转换器。所以它可能是这样。

删除内部绑定中的转换器,它应该是固定的! 🙂

希望这可以帮助!