为什么这个WPF Binding无法识别Tuple子对象?

时间:2014-07-29 08:25:31

标签: c# wpf

我有这个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]未设置,因此非常复杂)。

0 个答案:

没有答案