为什么多值转换器不工作

时间:2014-02-23 17:18:34

标签: c# wpf mvvm converter

我有我的多值转换器:

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

1 个答案:

答案 0 :(得分:4)

背景属于Brush类型,但您将从转换器返回String。而是返回画笔实例:

return new SolidColorBrush(Colors.Blue);

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


<强>更新

我看到IValueConverter有效但与IMultiValueConverter无效的一些奇怪角落。多值转换器需要返回与目标属性相同的类型。

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

我猜IValueConverter类型转换是由WPF绑定引擎处理的,而不是IMultiValueConverter的情况。