gpt4 book ai didi

c# - 为什么多值转换器不起作用

转载 作者:行者123 更新时间:2023-11-30 20:51:12 25 4
gpt4 key购买 nike

我有我的多值转换器:

class ColorMultiConverter:IMultiValueConverter
{

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values != null)
{
if (values[0] != DependencyProperty.UnsetValue && values[1] != DependencyProperty.UnsetValue)
{
var customerRating = Int32.Parse(values[0].ToString());
var customerName = values[1].ToString();
if (customerName == "RaOne" && customerRating > 7)
{
return "Blue";
}
}
else
return "Yellow";

}
return "Red";
}

在 XAML 中,我将它们绑定(bind)为:

<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Setters>
<!--<Setter Property="Background" Value="{Binding CustomerRating,Converter={StaticResource colorConverter}}">-->
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource colorMultiConverter}">
<Binding Path="CustomerRating"/>
<Binding Path="Customername"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</DataGrid.RowStyle>

但是我的颜色没有反射(reflect)在网格行上!!

编辑 1:

背景是Brush类型,那么下面的代码怎么行??这按预期工作,但返回字符串 !!!

    class ColorConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int colorValue = Int32.Parse(value.ToString());

if (colorValue < 7)
{
return "Blue";
}
return "Red";
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

<Setter Property="Background" Value="{Binding CustomerRating,Converter={StaticResource colorConverter}}">

最佳答案

背景是 Brush 类型,但您正在从转换器返回 String。返回画笔实例:

return new SolidColorBrush(Colors.Blue);

替换所有其他实例以返回 SolidColorBrush


更新

我看到一些奇怪的角落,其中 IValueConverter 可以工作,但不能与 IMultiValueConverter 一起工作。多值转换器需要返回与目标属性相同的类型。

即使您将 Width 与 IValueConverter 绑定(bind)并从中返回 100,它也能正常工作。但是尝试从 IMultiValueConverter 返回 100,除非您将其更改为 100.0,否则它不会工作,因为 width 是 double 类型。

我猜 IValueConverter 类型转换是由 WPF 绑定(bind)引擎处理的,但 IMultiValueConverter 不是这种情况。

关于c# - 为什么多值转换器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21971581/

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