1

我正在尝试将 a 绑定ComboBoxDataContext.

<ComboBox ItemsSource="{Binding Path=Numbers}"
                                SelectedValue="{Binding Path=CurrentNumber,Mode=TwoWay}">
</ComboBox>

上面的代码有效,但是当我尝试使用转换器实现更改项目的显示方式时IMultiValueConverterMultiBinding没有显示任何内容。我已经调试了实现的方法IMultiValueConverter,但它没有被执行。可能是什么问题呢?

<ComboBox ItemsSource="{Binding Path=Numbers}"
                                SelectedValue="{Binding Path=CurrentNumber,Mode=TwoWay}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding Converter="{StaticResource MultiUnitConverter}" ConverterParameter="{x:Static enumerations:Quantity.Length}" >
                        <Binding Path="."/>
                        <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.CurrentUnit"/>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

更新:

我尝试了以下而不是ComboBox,转换器被触发并且数据被加载但不显示!

<TextBlock>
    <TextBlock.Text>
        <MultiBinding Converter="{StaticResource MultiUnitConverter}" ConverterParameter="{x:Static enumerations:Quantity.Length}" >
            <Binding Path="CurrentNumber"/>
            <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.CurrentUnit"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

但以下工作:

<TextBlock>
    <TextBlock.Text>
        <Binding Path="CurrentNumber"></Binding>
    </TextBlock.Text>
</TextBlock>
4

2 回答 2

1

对于所有将来可能会陷入困境并毁掉整个晚上的人来说,这是我找到的解决方案!

似乎添加StringFormat解决了问题!

<ComboBox ItemsSource="{Binding Path=Numbers}" SelectedItem="{Binding Path=Number, Mode=TwoWay}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock.Text>
                    <MultiBinding 
                                Converter="{StaticResource MultiUnitConverter}" 
                                ConverterParameter="{x:Static enumerations:Quantity.Length}"
                                StringFormat="{}{0:0.###}">
                        <Binding Path="."/>
                        <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Window}}" Path="DataContext.CurrentUnit"/>
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>
于 2016-07-13T20:01:45.913 回答
0

您是否在 xaml 的其他位置定义了转换器资源?如果没有,你应该这样做。例如,如果您的 ComboBox 位于 UserControl 中,您可以添加:

<UserControl.Resources>
    <local:MultiUnitConverter x:Key="multiUnitConverter"/>
</UserControl.Resources>

当然,您需要更新您的 Converter StaticResource 以匹配上面区分大小写的 Key。

于 2016-07-13T17:31:17.167 回答