Laden...

CellTemplate und IValueConverter

Erstellt von MichaS vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.419 Views
M
MichaS Themenstarter:in
39 Beiträge seit 2008
vor 16 Jahren
CellTemplate und IValueConverter

Hallo,

ich stehe vor folgendem Problem: möchte mir dynamisch eine ListView mit einem GridView aufbauen und generiere mir die Spalten in Abhängigkeit der Spalten in einer DataTable. Soweit funktioniert das ganze. Ich habe in einer bestimmten Spalte bool Werte für das Geschlecht, 0 für männlich, 1 für weiblich. Mit einem IValueConverter wandle ich den booleschen Wert in ein BitmapImage-Objekt um, den ich dann im CellTemplate an das Source-Property eines Image-Objektes binden möchte:


public void SetDataSource(DataTable table)
{
    // creating the columns for listview
    foreach (DataColumn column in table.Columns)
    {
        GridViewColumn gvColumn = new GridViewColumn();
        gvColumn.Header = column.ColumnName;
        Binding b = new Binding();

        if(column.ColumnName.Equals("Gender"))
        {
            gvColumn.CellTemplate = Resources["GenderCellTemplate"] as DataTemplate;
            b.Path = new PropertyPath(column.ColumnName);
            b.Converter = new GenderConverter();
        }
    
        else
        {
            b.Path = new PropertyPath(column.ColumnName);
            gvColumn.DisplayMemberBinding = b;
        }
        GridView.Columns.Add(gvColumn);
    }
    liste.DataContext = table.DefaultView;
}

Wie bekomme ich jetzt das Binding-Objekt b an die GridView-Zelle??
mit


gvColumn.DisplayMemberBinding = b;

geht es nicht, da dann zwar der IValueConverter benutzt wird, aber der zurückgegebene Wert nicht an das CellTemplate gebunden wird, sondern stattdessen einen TextBlock verwendet, der als Text den ToString()-Wert verwendet, also in diesem Fall

/Picture/true.jpg

in der Zelle steht...

Wo liegt hier der Fehler?

354 Beiträge seit 2004
vor 16 Jahren

Gar nicht. Denn die Zelle als solches gibt es ja nicht. Du definierst mit deinem Grid ja nur einen Raster. Nun musst du aber auch definieren, was wo genau dargestellt wird. D.h. du definierst, dass beispielsweise in Spalte 0 und Zeile 1 ein TextBlock anzuzeigen ist. An diesen kannst du auch etwas binden.

Das sollte bei deinen Überlegungen weiterhelfen.

.NET GUI - Die Community für grafische Oberflächen unter .NET
Jetzt kostenlos besorgen: .NET BlogBook
Norbert Eder
DasBackup