gpt4 book ai didi

c# - MultiBinding 转换器未绑定(bind)到 DataTemplate 中的 TextBlock

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:18 24 4
gpt4 key购买 nike

我有一个包含多个列的 DataGrid,在其中一列中,我正在使用 MultiBinding 绑定(bind)到 MultiValueConverter,但什么也没有出现在该专栏中。我不确定我做错了什么。 DataGridItemSource MfrSelection 不包含对应于 VolumeToPercentConverter 的对象。这是搞乱绑定(bind)的原因吗?

这是相关的xaml

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

以及我后面代码中的转换器:

public class VolumeToPercentConverter : IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
decimal percent = 0;
if (value[0] is decimal && value[1] is decimal)
{
if ((decimal)value[1] != 0 && (decimal)value[0] != 0)
{
percent = ((decimal)value[0] - (decimal)value[1]) / (decimal)value[1];
return percent;
}
else
{
return percent;
}
}
else
{
return percent;
}
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return null;
}
}

最佳答案

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>

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

关于c# - MultiBinding 转换器未绑定(bind)到 DataTemplate 中的 TextBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com