WPF MVVM Erstellen von dynamischen Steuerelementen

8

WPF MVVM Erstellen von dynamischen Steuerelementen - Ich habe ein Raster, in dem ich die Details eines Jobs (Sie können etwas wie einen SQL-Server-Job sagen) finden.

Nun könnte es für jeden Job eine Anzahl von Jobvariablen geben. Wenn ich den Datensatz für einen Job abrufe, erhält er diese Auflistung von Job-Variablen, bei denen es sich um ein Name-Wert-Paar handelt, wobei Wert eine Sammlung oder ein Datetime-Wert oder sogar ein Int oder eine Zeichenfolge sein kann.

Nun, was ich hier erreichen möchte, ist: - Wenn die Laufvariable ein Datetime ist, brauche ich einen Datepicker - Wenn es ein int / String ist, brauche ich ein Textfeld - Wenn es sich um eine Sammlung handelt, dann ein Kombinationsfeld. - Es ist ein bisschen Feld, dann ein Kontrollkästchen

Ich bin mir nicht sicher, wie ich das erreichen kann, da diese Werte für jeden einzelnen Job unterschiedlich sein können.

    
user635097 11.03.2011, 01:06
quelle

2 Antworten

9

Ich gehe davon aus, dass Sie einige Objekte, die diese Name / Wert-Paare repräsentieren, in ein ItemsControl setzen, indem Sie die Eigenschaft ItemsSource festlegen.

Es gibt ein paar Lösungen, die Sie verwenden können.

Verwenden von DataTemplate mit Triggern:

Bei diesem Ansatz wird der "Typ" jedes Ihrer Objekte durch die Eigenschaft YourPropertyType als String dargestellt. Sie setzen ItemTemplate Ihrer ItemsControl auf eine Vorlage, die ein ContentControl hostet. Für die ContentControl selbst wird ContentTemplate dynamisch mit Triggern ausgewählt.

All dies kann deklarativ in XAML getan werden.

Ich nehme an, Sie haben weitere DataTemplates named DefaultTemplate (dies kann leer sein), IntegerTemplate , StringTemplate usw., um die visuelle Struktur für jeden Fall zu skizzieren.

Dies wäre dann ItemsControl.ItemTemplate :

%Vor%

Verwendung von DataTemplateSelector :

Dieser Ansatz erfordert Code-Behind, aber es zwingt Sie nicht, den "Typ" jedes Name / Wert-Paares als Zeichenfolge anzugeben, und Sie können auswählen, welche Vorlage mit viel komplexerer Logik verwendet werden soll.

>

Es beinhaltet das Erstellen einer Klasse als Vorlagenauswahl:

%Vor%

Dann müssen Sie einen Template-Selektor irgendwo instanziieren (sagen wir in Ihrem UserControl )

%Vor%

Beachten Sie, dass ich eine DefaultTemplate -Eigenschaft von YourObjectDataTemplateSelector verfügbar gemacht und diese über XAML auf eine Vorlage gesetzt habe. In der Praxis würden Sie mehr Eigenschaften vom Typ DataTemplate für YourObjectDataTemplateSelector definieren und den Vorlagenselektor beim Hinzufügen in das Ressourcenwörterbuch Ihres Steuerelements "konfigurieren". Auf diese Weise können Sie die Vorlagen für jeden Fall mit der Erweiterung StaticResource markup von XAML direkt festlegen.

Verknüpfen Sie schließlich den Vorlagen-Selektor mit Ihrem ItemsControl :

%Vor%     
Jon 11.03.2011, 01:16
quelle
2

Ich glaube, Sie suchen nach einer Form von Data Templating und der DataTemplateSelector um zu erreichen, wonach Sie suchen.

    
Oppositional 11.03.2011 01:11
quelle

Tags und Links