WPF - Parameter zu DataTemplates?

9

Ich habe eine ListBox, die Daten über Mitarbeiter wie Name, Abteilungsfoto, Ausweisnummer usw. enthält. Mitarbeiter können verschiedene Typen haben, wie Manager, Mitarbeiter, Freiwillige. Ich habe 3 separate Datenvorlagen - eine für jeden Typ. Alle diese Vorlagen zeigen grundsätzlich dieselben Daten, werden aber anders dargestellt.

Abhängig von dem Benutzer, der an der Anwendung angemeldet ist, können Bilder, Ausweisnummer usw. sichtbar sein oder nicht. Also habe ich boolsche Eigenschaften dafür - CanSeePhotos, CanSeeBadgeNumbers, etc. Wenn also CanSeePhotos == false, sollten alle Datenvorlagen die Fotos verstecken.

Meine Frage ist, wie kann ich diese booleschen Eigenschaften in meinen Datenvorlagen verwenden, um die Sichtbarkeit der entsprechenden Elemente zu ändern? Gibt es eine Möglichkeit, Parameter an Datenvorlagen zu übergeben, wenn ich sie von meinem TemplateSelector zurückgebe?

Danke!

edit: Nach Ray's Idee habe ich das gemacht:

%Vor%     
Gus Cavalcanti 06.11.2009, 01:55
quelle

1 Antwort

4

Tatsächlich gibt es eine Möglichkeit, DataTemplates so anzupassen, wie sie vom TemplateSelector zurückgegeben werden, indem Sie sie in eine FrameworkElementFactory einfügen, aber das ist viel zu komplex für Ihre Anforderungen.

Für Ihren Fall gibt es zwei Lösungen, die viel einfacher sind: Auslöser und Konverter.

Auslöser

Sie können einen Trigger in der DataTemplate verwenden. Geben Sie beispielsweise die TextBox oder das Panel an, in dem Sie die Badge-Nummer und ein x: Name anzeigen, und erstellen Sie dann einen DataTrigger für die CanSeeBadgeNumbers-Eigenschaft. Fügen Sie dem DataTrigger einen Setter hinzu, und legen Sie die Visible-Eigenschaft auf Hidden oder Collapsed fest und verweisen Sie dabei auf den Namen.

Grundidee:

%Vor%

Konverter

Sie können einen IValueConverter in Code erstellen, der "bool" -Typ in "Visibility" -Typ konvertiert (es gibt viele Beispiele, die Sie ausschneiden und einfügen können), dann binden Sie die Sichtbarkeit der TextBox an die CanSeeBadgeNumbers mit dem Konverter.

%Vor%

Wie ich es tue

Ich verwende tatsächlich eine andere Technik für meinen eigenen Code: Meine Datengrundlage enthält eine MarkupExtension, die ich geschrieben habe und die meinen C # -Expressionsparser aufruft, also kann ich etwas wie

sagen %Vor%

Leider wurde meine Datengrundlage noch nicht veröffentlicht. Wenn es so ist, plane ich, es frei und Open Source zu machen, aber das ist noch ein paar Monate weg.

    
Ray Burns 06.11.2009, 03:51
quelle

Tags und Links