我有一个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>
答案 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}"
,它将小数格式化为一个很好的百分比。