使用转换器时,绑定Combobox不起作用

时间:2016-07-13 17:14:32

标签: wpf xaml combobox datacontext imultivalueconverter

我试图将ComboBox绑定到DataContext

<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>

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

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

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