Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 使用转换器时,绑定组合框不起作用_Wpf_Xaml_Combobox_Datacontext_Imultivalueconverter - Fatal编程技术网

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

Wpf 使用转换器时,绑定组合框不起作用,wpf,xaml,combobox,datacontext,imultivalueconverter,Wpf,Xaml,Combobox,Datacontext,Imultivalueconverter,我正在尝试将一个组合框绑定到DataContext <ComboBox ItemsSource="{Binding Path=Numbers}" SelectedValue="{Binding Path=CurrentNumber,Mode=TwoWay}"> </ComboBox> 更新: 我尝试了以下操作,而不是使用组合框,转换器启动,数据加载但不显示 <TextBlock> <

我正在尝试将一个组合框绑定到
DataContext

<ComboBox ItemsSource="{Binding Path=Numbers}"
                                SelectedValue="{Binding Path=CurrentNumber,Mode=TwoWay}">
</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的其他地方定义了转换器资源?如果没有,你应该这样做。例如,如果您的组合框位于UserControl中,则可以添加:

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


当然,您需要更新您的资源以匹配上面的区分大小写的密钥。

对于所有可能在将来遇到此问题并毁掉整个晚上的人,我找到了解决方案

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


如果是这样的话,我想他可能会听到这件事;我在一个不存在的StaticResource上得到一个XamlParseExceptionResourceKey@EdPlunkett资源在那里,我没有得到任何例外。只是没人叫它!两个绑定是否都正常工作?例如,在模板中临时放置两个文本块,两个绑定各一个,你看到你期望的了吗?窗口的viewmodel提升属性是否已适当更改?@EdPlunkett我不会在此处更改任何内容,因此是否应提升属性更改?我的其他组合框没有问题,这些组合框中也没有提出PropertyChanged。如果没有模板,当前组合框可以很好地绑定到源代码。你能解释一下你所说的两个临时文本框是什么意思吗?@Vahid多重绑定从这个绑定中得到了什么值:
?你能在这个文本块中显示任何内容吗?暂时将模板更改为
,怎么样?@EdPlunkett我也试过了。更新了问题。没有成功:(我真的很想看看这个转换器的源代码。@EdPlunkett我找到了解决方案!这可能是一个bug或其他原因!添加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>