如何更改numericupdown中引用的特定数据网格行的颜色

时间:2015-04-15 19:22:38

标签: c# wpf mvvm datagrid

我在MVVM模式中有一个WPF datagrid和整数numericupdown。我的用户已经要求更改numericupdown,相应行的背景颜色也会更改。

我无法更改网格的SelectedIndex来进行突出显示。

1 个答案:

答案 0 :(得分:0)

你走了:

<DataGrid AlternationCount="{x:Static system:Int32.MaxValue}">
    <DataGrid.Resources>
        <wpfApplication2:EqualsMultiConverter x:Key="EqualsMultiConverter" />
    </DataGrid.Resources>
    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}">
            <Style.Triggers>
                <DataTrigger Value="True">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource EqualsMultiConverter}">
                            <Binding Path="(ItemsControl.AlternationIndex)" RelativeSource="{RelativeSource Self}" />
                            <Binding Path="ViewModelPropertyBoundToNumericUpDown" />
                        </MultiBinding>
                    </DataTrigger.Binding>

                    <Setter Property="Background" Value="#CCC" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

基本上,我们将交替指数设置为足够大的数字,因此它变成行数。然后我们将它与使用此转换器的数字向上数字进行比较:

public class EqualsMultiConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return Equals(values[0], values[1]);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

请注意,NumericUpDown可能会返回double而不是int,在这种情况下,您可能需要在转换器代码中将这两个值转换为相同的类型。