我有我的多值转换器:
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中,我将它们绑定为:
<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>
但是我的色彩没有反映在网格排上!!
修改1:
后台是Brush类型,那么下面的Code如何正常?尽管返回字符串!!!这可以正常工作!!!
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}}">
答案 0 :(得分:4)
背景属于Brush
类型,但您将从转换器返回String
。而是返回画笔实例:
return new SolidColorBrush(Colors.Blue);
替换所有其他实例以返回SolidColorBrush
。
<强>更新强>
我看到IValueConverter
有效但与IMultiValueConverter
无效的一些奇怪角落。多值转换器需要返回与目标属性相同的类型。
即使将Width
与IValueConverter绑定并从中返回100,它也能正常工作。但是尝试从IMultiValueConverter返回100
,除非您将其更改为100.0
,否则它将无效,因为width是double类型。
我猜IValueConverter类型转换是由WPF绑定引擎处理的,而不是IMultiValueConverter的情况。