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>