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

How do I changed the color of a specific datagrid row referenced in a numericupdown

我在 MVVM 模式中有一个 WPF 数据网格和整数 numericupdown。我的用户要求随着 numericupdown 的改变,相应行的背景颜色也改变了。

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

给你:

<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 returns double 而不是 int,在这种情况下,您可能需要在转换器代码中将这两个值转换为相同的类型。