Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
CellTemplate und IValueConverter
MichaS
myCSharp.de - Member



Dabei seit:
Beiträge: 39

Themenstarter:

CellTemplate und IValueConverter

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MichaS am .
private Nachricht | Beiträge des Benutzers
nitronic
myCSharp.de - Member

Avatar #avatar-1597.jpg


Dabei seit:
Beiträge: 354
Herkunft: Österreich

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers