我有这个WPF绑定:
<MultiBinding Converter="{StaticResource OrderExclusionConverter}">
<Binding Path="DataContext" RelativeSource="{RelativeSource AncestorType=ListView}"/>
<Binding Path="." />
</MultiBinding>
其中&#34; DataContext&#34;是Tuple<Order, bool>
(订单是实体框架对象)。
当我进入转换器并尝试获取值时,我只想要订单:我对bool值不感兴趣。在XAML的其他地方,我可以使用这种C#样式表示法来获取元组中的bool:
<CheckBox IsChecked="{Binding Item2, Mode=OneWay}" />
但是,如果我在Multibinding中这样做:
<Binding Path="DataContext.Item1" RelativeSource="{RelativeSource AncestorType=ListView}" />
然后在转换器中,value数组具有该对象的DependencyProperty.UnsetValue
。这具有相同的效果(不是我预期它可以工作,只是搞乱):
<Binding Path="DataContext[0]" RelativeSource="{RelativeSource AncestorType=ListView}" />
但是,如果我这样做:
<Binding Path="DataContext.Item1.ID" RelativeSource="{RelativeSource AncestorType=ListView}" />
然后value数组包含预期的int值 - 绑定对象的ID。
当然,我可以通过整个元组并使用它,如果有点笨拙就没问题。我真的很好奇这里发生了什么。为什么我不能通过元组的两个项目之一,但我可以传递该项目的属性?
编辑:
我被问及转换器。我使用的是MVVM,转换器看起来像这样:
public object Convert(object[] value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Tuple<Order, bool> oh = (Tuple<Order, bool>)value[0];
DateTime mc = (DateTime)value[1];
//do stuff that sometimes returns true
return false;
}
我通过在设置oh
并检查value
内部内容的第一行设置断点来捕获这些错误。我可以确认,如果您尝试使用DataContext.Item1
并强制转换为Order
,则会抛出异常(因为它意味着值[0]未设置,因此非常复杂)。