MultiBinding Converter未绑定到DataTemplate中的TextBlock

时间:2014-09-03 17:14:02

标签: c# wpf xaml data-binding datagrid

我有一个DataGrid,其中包含多个列,其中一列我使用MultiBinding绑定到MultiValueConverter,但该列中没有显示任何内容。我不确定我做错了什么。 ItemSource DataGrid的{​​{1}}不包含与MfrSelection对应的对象。这是搞乱绑定的原因吗?

这是相关的xaml

VolumeToPercentConverter

我的代码中的转换器背后:

    <Window.Resources>
        <local:VolumeToPercentConverter x:Key="VolumeToPercentConverter"/>
    </Window.Resources>
    ...        
<DataGrid x:Name="_mfrSelectionGrid" Grid.ColumnSpan="2" Grid.Row="2" ItemsSource="{Binding MfrSelection}" Margin="5,0" AutoGenerateColumns="False">
    ... 
                    <DataGridTemplateColumn x:Name="_PercentChange" IsReadOnly="True" Visibility="Visible" Header="Percent Change">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Margin="3,0" VerticalAlignment="Center">
                                    <TextBlock.Text>
                                        <MultiBinding Converter="{StaticResource VolumeToPercentConverter}">
                                            <Binding Path="YearVolume"/>
                                            <Binding Path="LastYearVolume"/>
                                        </MultiBinding>
                                    </TextBlock.Text>
                                </TextBlock>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

1 个答案:

答案 0 :(得分:4)

VolumeToPercentConverter返回一个十进制值,但TextBlock.Text属性需要一个字符串。这是我在创建测试项目时在“输出”窗口中收到的错误:

Value produced by BindingExpression is not valid for target property.; Value='1' MultiBindingExpression:target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')

我通过更新xaml解决了这个问题,如下所示:

<MultiBinding Converter="{StaticResource VolumeToPercentConverter}" StringFormat="{}{0:P}">
    <Binding Path="YearVolume"/>
    <Binding Path="LastYearVolume"/>
</MultiBinding>

秘密酱是StringFormat="{}{O:P}",它将小数格式化为一个很好的百分比。