使用转换器时绑定组合框不起作用

Binding Combobox does not work when a Converter is used

我正在尝试将 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>

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

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

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

对于所有将来可能会遇到这个问题并毁掉他们整个晚上的人,这里是我找到的解决方案!

似乎添加 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>