Laden...

Entscheidung welches DataTemplate geladen wird in einem Converter

Erstellt von Hans_Rakete vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.391 Views
H
Hans_Rakete Themenstarter:in
178 Beiträge seit 2011
vor 12 Jahren
Entscheidung welches DataTemplate geladen wird in einem Converter

Hallo,

ich möchte in einem DataGrid verschiedene RowDetailTemplates einbinden, dazu habe ich mir einen Converter gebaut. Nun scheitert es aber bei mir aber an der Rückgabe: Wie müsste diese aufgebaut sein damit daraus ein entsprechendes DataTemplate geladen wird?

Code bisher:


<Window.Ressources>
<local:converter_detail_rows x:Key="con_detail_rows"/>
<DataTemplate x:Key="RD1">
...
</DataTemplate>
<DataTemplate x:Key="RD2"/>
<DataTemplate x:Key="RDx"/>
</Window.Ressources>

... 

<DataGrid RowDetailsTemplate="{Binding typ, Converter={StaticResource con_detail_rows}}" .../>

der Converter:

public class converter_detail_rows : IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            switch (value as String)
            {
                case "wert1":
                    return ("StaticResource RD1");
 case "wert2":
                    return ("StaticResource RD2");
                default:
                    return ("StaticResource RDx");
            }
        }

Also die Rückgabe "StaticResource RD1" funktioniert nicht; welche könnte laufen?

Danke.

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

du musst bei deiner Variante mit dem Converter das Template direkt zurückgeben. Sprich mit FindRessource das Template mit dem entsprechenden Namen raussuchen und das zurückgeben. Momentan gibst du ja nur nen String statt nen Template an, klar das er damit nichts anfangen kann.

Baka wa shinanakya naoranai.

Mein XING Profil.

3.511 Beiträge seit 2005
vor 12 Jahren

Hallo,

was du brauchst, ist ein TemplateSelector, und kein ValueConverter.

Schau mal hier "WPF Tutorial | DataGrid" unter "Row Details depending on the type of data".

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

H
Hans_Rakete Themenstarter:in
178 Beiträge seit 2011
vor 12 Jahren

Vielen Dank für eure Antworten. Mit einem ValueConverter funktioniert es grundsätzlich nicht?

nachdem ich die Ressource erreichbar mache (public DataTemplate RD1 { get; set; }) kann ich diese nicht zurück liefern (return RD1)? - funktioniert leider nicht.

public class converter_detail_rows : IValueConverter
    {
        public DataTemplate RD1 { get; set; }
        public DataTemplate RD2 { get; set; }
        public DataGrid dg { get; set; }
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            switch (value as String)
            {
                case "wert1":
                    return dg.RowDetailsTemplate = RD1;
                default:
                    return dg.RowDetailsTemplate = RD2;
            }
        }

Der TemplateSelector scheint nett, allerdings habe ich noch keinen Weg gefunden ihm einen Wert mitzugeben nachdem er unterscheiden soll ...

Danke.

109 Beiträge seit 2011
vor 12 Jahren

Hallo,

Der TemplateSelector scheint nett, allerdings habe ich noch keinen Weg gefunden ihm einen Wert mitzugeben nachdem er unterscheiden soll ...

<DataGrid RowDetailsTemplateSelector="{StaticResource templateSelector}" .../>

Mitgegeben werden nun die einzelnen Objekte des Datenquelle des Grids, also die Objekte die eine Zeile in deinem Grid repräsentieren. Zumindestens wenn du es nicht expliziet änderst.

Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....