Musisz wypełniać DataGrid'a odpowiednią klasą. Oprócz zwykłych pól klasa taka przechowuje również informacje na temat koloru wiersza i na temat tego czy wiersz został zaznaczony czy nie. To może być coś takiego jak poniżej:
public class AppUser : INotifyPropertyChanged
{
public int No { get; set; }
public int Id { get; set; }
public string Username { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
private bool isChecked { get; set; }
public bool IsChecked
{
get { return this.isChecked; }
set
{
this.isChecked = value;
this.OnPropertyChanged(nameof(this.IsChecked));
// Magia tutaj.
if (this.isChecked) this.Color = "LightBlue";
else this.Color = "White";
}
}
private string color;
public string Color
{
get { return this.color; }
set
{
this.color = value;
this.OnPropertyChanged(nameof(this.Color));
}
}
public AppUser()
{
// Musisz zdefiniować domyślny kolor w konstruktorze.
this.Color = "White";
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
Sama siatka natomiast niech wygląda tak:
<DataGrid Grid.Row="0" Grid.Column="0" AutoGenerateColumns="False"
HorizontalGridLinesBrush="Silver" VerticalGridLinesBrush="Silver"
CanUserAddRows="False" HeadersVisibility="Column"
SelectionMode="Single" SelectionUnit="FullRow"
ItemsSource="{Binding Users,UpdateSourceTrigger=PropertyChanged,IsAsync=True}">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="{Binding Color,UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Header="No" SortMemberPath="No"
Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding No}"
VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Check" SortMemberPath="IsChecked"
Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked,UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center" HorizontalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Username" SortMemberPath="Username"
Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Username}"
VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Name" SortMemberPath="Name"
Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Name}"
VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Surname" SortMemberPath="Surname"
Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Surname}"
VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Bindowanie jest robione standardowo i wszystko samo działa.