2011-01-10 12 views
3

Ich habe das Gefühl, ich vermisse hier etwas offensichtlich, aber ich finde keine Möglichkeit, eine DataGrids DataGridRow-Sammlung zu durchlaufen. Ich habe ein Gitter, das eine Itemsource einer Sammlung meiner Klasse hat. Ich versuche, durch die Reihen zu iterieren und alle Reihen hervorzuheben, die eine bestimmte Bedingung erfüllen, aber kann für das Leben von mir nicht sehen, wie.Schleife durch Zeilen in Silverlight DataGrid

Antwort

2

Sie wollen nicht durch das Gitter zu durchlaufen. Das ist Old-Skool WinForms Denken. Die Grids in WPF und Silverlight wurden unter Berücksichtigung von MVVM überarbeitet. mit Trennung der Sorgen. Anstatt das Raster zu manipulieren, arbeiten Sie direkt mit Ihren Objekten, die an das Raster gebunden sind. So wird das Raster zum Präsentationsaspekt. Seine Aufgabe ist es, die Objekte zu lesen und Informationen basierend auf den Daten in diesen Objekten anzuzeigen.

Sie möchten stattdessen Eigenschaften an das Objekt anfügen, an das Sie eine Bindung herstellen, und basierend auf diesen Einstellungen die Gitterstile für Farbe/Schriftart/etc. Um dies zu tun, müssen Sie einen IValueConverter erstellen. Hier

ist ein Beispiel eines Wandlers ich in einem WPF und Silverlight Datagrid habe:

public class StateToBackgroundColorConverter : IValueConverter 
    { 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) return Colors.White.ToString(); 

     var state = (State) value; 
     return state.WebColor; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
    } 

In meinem XAML ich es wie folgt erklären:

<UserControl.Resources> 
    <Converters:StateToBackgroundColorConverter x:Key="stateToBackgroundColorConverter"/> 
</UserControl.Resources> 

In der Datagrid-Deklaration in XAML I Spezifizieren Sie die Konverter-Nutzung für die DataGridRow:

Also, der Konverter macht die Arbeit. Es liest den Wert des State-Objekts (das ein untergeordnetes Objekt auf meinem AgentState-Objekt ist, an das das Grid gebunden ist; es ist an eine Auflistung von AgentState-Objekten gebunden). Der Konverter liest den Wert des Status und gibt eine Zeichenfolgendarstellung einer Farbe für das Raster zurück, das für die Festlegung der Zeile verwendet werden soll.

Hoffe, dass hilft.

Verwandte Themen