/ / WPF grille de données change de couleur lorsque le texte change - c #, wpf, grille de données, couleurs

La grille de données WPF change de couleur lorsque le texte change - c #, wpf, grille de données, couleurs

Je souhaite modifier la couleur de la cellule dans une grille de données lorsque l'utilisateur modifie le texte ou le contenu de cette cellule.

J'utilise WPF en C #.

J'ai une simple grille de données:

<DataGrid x:Name="dataGrid1" Grid.RowSpan="2" Margin="5" ItemsSource="{Binding Source=Horreos}" KeyDown="dataGrid1_KeyDown" SelectedCellsChanged="dataGrid1_SelectedCellsChanged"> <DataGrid.Columns > </DataGrid.Columns> </DataGrid>

This events: keydown et selectedcellschange sont des tests pour changer ma cellule de couleur. Dans le .cs j'ai essayé de changer le cel .... mais j'ai échoué.

J'ai besoin d'un événement qui est publié lorsque le contenu change

Réponses:

0 pour la réponse № 1

Définissez un comportement, le moyen le plus simple consiste à utiliser Blend. Je fournis un exemple contre une grille de données sur mon article de blog: Xaml: Ajout de comportements de visibilité utilisant Blend à un DataGrid pour WPF ou Silverlight


0 pour la réponse № 2

Résolu:

 private void dataGrid1_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
DataGridCell gridCell = null;
try
{
gridCell = GetCell(dataGrid1.SelectedCells[0]);
}
catch (Exception)
{
}
if (gridCell != null)
gridCell.Background = Brushes.Red;

}
public  DataGridCell GetCell(DataGridCellInfo dataGridCellInfo)
{
if (!dataGridCellInfo.IsValid)
{
return null;
}

var cellContent = dataGridCellInfo.Column.GetCellContent(dataGridCellInfo.Item);
if (cellContent != null)
{
return (DataGridCell)cellContent.Parent;
}
else
{
return null;
}
}

private void MyDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
DataGrid grid = sender as DataGrid;
e.Row.MouseEnter += (s, args) => Row_MouseEnter(s, grid);
e.Row.MouseLeave += (s, args) => Row_MouseLeave(s, grid);
}

void Row_MouseLeave(object sender, DataGrid grid)
{
DataGridRow row = sender as DataGridRow;
grid.SelectedIndex = -1;
}

void Row_MouseEnter(object sender, DataGrid grid)
{
DataGridRow row = sender as DataGridRow;
grid.SelectedIndex = row.GetIndex();

}

Lorsque l'utilisateur a fini d'éditer, la cellule devient rouge.

 <DataGrid x:Name="dataGrid1" Grid.RowSpan="2" SelectionUnit="CellOrRowHeader"
Margin="5" ItemsSource="{Binding Source=Source}" LoadingRow="MyDataGrid_LoadingRow"  CellEditEnding="dataGrid1_CellEditEnding">
<DataGrid.Columns>