Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据ViewModel中的属性更改DataGrid的边框颜色_C#_Wpf_Mvvm_Datagrid - Fatal编程技术网

C# 根据ViewModel中的属性更改DataGrid的边框颜色

C# 根据ViewModel中的属性更改DataGrid的边框颜色,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,我有一个组合框和一个数据网格。我希望能够在组合框中选择一个值(SelectedItem被数据绑定到ViewModel的属性)。如果DataGrid中特定列的单元格值与combobox值匹配,我想更改整行的边框颜色。我找到了使用转换器更改DataGrid边框颜色的方法,但是ConverterParameter无法绑定到SelectedItem属性,因为它不是DependencyProperty或DependencyObject。关于我如何做到这一点,有什么想法吗?谢谢 在您的DataGridRow

我有一个组合框和一个数据网格。我希望能够在组合框中选择一个值(SelectedItem被数据绑定到ViewModel的属性)。如果DataGrid中特定列的单元格值与combobox值匹配,我想更改整行的边框颜色。我找到了使用转换器更改DataGrid边框颜色的方法,但是ConverterParameter无法绑定到SelectedItem属性,因为它不是DependencyProperty或DependencyObject。关于我如何做到这一点,有什么想法吗?谢谢

在您的
DataGridRow.Style的
DataTriggers
中使用带多值转换器的多绑定:

Xaml:


为什么不使用Javascript…特别是Jquery?这是一个WPF桌面应用程序。对不起,我应该读一下tagsNo问题-无论如何,谢谢!在我发布原始问题后,我也发现了这种方法。我所做的是为记录的ViewModel添加了一个Brush属性,并将BorderBrush的setter值数据绑定到这个新属性,这似乎是完成工作的更简单方法。不过,当我有额外的时间时,我可能会将它改为这种方法。谢谢@Bahman_Aries!!
<Window.Resources>
    <local:MultiConverter x:Key="multiConv"/>
</Window.Resources>
...

    <DataGrid ItemsSource="{Binding ViewModel.MyList}" >
        <DataGrid.RowStyle >
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <DataTrigger Value="true">
                        <DataTrigger.Binding>
                            <MultiBinding Converter="{StaticResource multiConv}">
                                <Binding Path="ColorColumn" />
                                <Binding Path="ViewModel.SelectedColor" RelativeSource="{RelativeSource Mode=FindAncestor,
                                                AncestorType=Window}"/>
                            </MultiBinding>
                        </DataTrigger.Binding>
                        <Setter Property="BorderBrush" Value="Red" />
                        <Setter Property="BorderThickness" Value="1" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>
    <ComboBox ItemsSource="{Binding ViewModel.ColorList}" 
              SelectedItem="{Binding ViewModel.SelectedColor}"/>
public class MultiConverter : IMultiValueConverter
{
    public object Convert(
        object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values[0] is MyColorType &&
            values[1] is MyColorType &&
            // if ComboBox.SelectedColor == CurrentDataGridRow.ColorColumn
            (MyColorType)values[0] == (MyColorType)values[1])
            return true;

        return false;
    }

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