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?

È stato utile?

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);
                        }                            
                    }


                }                  

            }
        }
    } 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top