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