Modificare una cella sfondo DataGrid dal codice dietro in Silverlight 4
-
27-10-2019 - |
Domanda
Sto scrivendo un'applicazione Silverlight che permette di analizzare il testo copiato tramite delimitatori inseriti. Dopo che i dati viene analizzato e caduto nella rete, l'utente ha la possibilità di "Scrub" i dati. Questo confronta il valore corrente di una cella per i valori consentiti per la colonna, prende il suo migliore ipotesi e rebinds i dati alla rete tramite la proprietà ItemsSource.
Il mio problema è che io so le coordinate di ogni cella che è stato "Scrubbed", e vorrei sottolineare questo cellulare o cambia il colore di sfondo. Per quanto posso vedere, è possibile impostare lo sfondo di un DataGridCell individualmente, ma non ho modo di accedere alla DataGridCell. Ho accesso a colonne e le righe della griglia, ma questi non vengono visualizzati neanche a dare accesso al DataGridCell come avevo sperato. Qualcuno ha un modo per accedere a un DataGridCell dopo l'ItemsSource è stato impostato?
Soluzione
Se si esegue un ciclo attraverso la raccolta tuo ItemsSource è destinato a, si può quindi prendere ogni riga e passare attraverso le colonne ricevendo il contenuto e la cella - qualcosa di simile (il trucco è content.Parent come DataGridCell):
var collection = grid.ItemsSource;
foreach (var dataItem in collection)
{
foreach (var col in grid.Columns)
{
var content = col.GetCellContent(dataItem);
if (content != null)
{
DataGridCell cell = content.Parent as DataGridCell;
// do whatever you need to do with the cell like setting cell.Background
}
}
}
Altri suggerimenti
Questo codice è utile per cambiare il colore della cella.
void datagrid_LoadingRow()
{
var collection = datagrid.ItemsSource;
foreach (var dataItem in collection)
{
foreach (var col in datagrid.Columns)
{
var content1 = col.GetCellContent(dataItem);
if (content1 != null)
{
TextBlock block = content1 as TextBlock;
if (block != null)
{
DataGridCell cell = content1.Parent as DataGridCell;
string cellText = block.Text;
if (cellText == "True")
{
cell.Background = new SolidColorBrush(Colors.Green);
}
if (cellText == "False")
{
cell.Background = new SolidColorBrush(Colors.Red);
}
}
}
}
}
}