Почему бы не включить это в вашу viewmodel. То, что я хотел бы сделать, это создать вложенную перечисляемую модель представления взаимодействия, т. Е. Если сетка данных связана с IEnumerable из T, где T - это модель представления, представляющая каждую строку, у id есть что-то вроде IndexSelected для этой модели представления.
Затем id привязывает задний цвет, используя какой-либо преобразователь значения к этому свойству indexselected,
public class RowViewModel
{
public string Col1 { get; set; }
public string Col2 { get; set; }
public string Col3 { get; set; }
public int IndexSelected { get; private set; }
//Id also make a command here or something to set the indexselected but ill leave that for you :)
}
public class GridViewModel
{
public ObservableCollection<RowViewModel> Rows; // Bound to Datagrid.ItemsSource.
}
Обратите внимание, что параметр преобразователя в привязке indexselected содержит индекс столбца
<sdk:DataGrid>
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Col1">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Background="{Binding IndexSelected, Converter={StaticResource IndexToColorConverter}, ConverterParameter=1}">
<TextBlock Text="{Binding Col1}" />
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="Col2">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid Background="{Binding IndexSelected, Converter={StaticResource IndexToColorConverter}, ConverterParameter=2}">
<TextBlock Text="{Binding Col2}" />
</Grid>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
и все, что нужно сделать конвертеру, это проверить, равно ли свойство привязанного индекса выбранному параметру (который является индексом столбца)
public class IndexToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == parameter)
{
return new SolidColorBrush(Colors.Red);
}
return new SolidColorBrush(Colors.White);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}