2015-12-09 13 views
5

In einem C# -Projekt habe ich ein komplexes Modell mit vielen Klassen in Listen und Wörterbüchern verschachtelt (z. B. Objekt A hat eine Liste von Instanzen von B, die ein Wörterbuch haben, wo Werte Instanzen von C sind)). Auf einer meiner Seiten wird dieses Modell in einer komplexen Ansicht mit verschachtelten ItemsControl s angezeigt.Bindung an mehrere Eigenschaften in UWP

Darüber hinaus gibt es eine Settings Klasse, die Benutzereinstellungen speichert, von denen einige an Kontrollkästchen auf der Seite gebunden sind.

Jetzt möchte ich Eigenschaften einiger Steuerelemente innerhalb der DataTemplate s an eine Kombination aus einer Modelleigenschaft und einer Einstellung binden. Nehmen wir zum Beispiel an, dass C eine Eigenschaft IsBoring hat, und es gibt Einstellungen Settings.HideBoringStuff. Ich möchte die Sichtbarkeit der TextBlock, die C darstellt, an die offensichtliche Kombination dieser Eigenschaften binden.

Ich habe keine Ahnung, wie man das ohne hässliche Hacks macht. Hier sind ein paar meiner Ideen und warum sie nicht arbeiten:

  • ein MultiBinding verwenden, die speziell dies zu tun, ist so konzipiert. MultiBinding ist jedoch in UWP-Projekten nicht verfügbar.

  • Bind to multiple properties on the page that implement the logic in their getters and setters. Dies funktioniert nicht, weil ich in einem DataTemplate bin, also brauche ich mehrere unabhängige Kopien dieser Logik.

  • Verwenden Sie Converter, um die Modelleigenschaft zu konvertieren. Die Einstellung wird als ConverterProperty übergeben. Die ConverterProperty ist jedoch noDependencyProperty und kann daher nicht gebunden werden.

  • Erstellen Sie die erforderlichen Eigenschaften direkt in das Modell – Settings ist ein Singleton sowieso. Das fühlt sich wirklich hässlich an, da ich unnötige Abhängigkeiten und View-Logik in mein Modell mische.

  • Erstellen Sie separate Klassen, die die Modellklassen umschließen, speichern Sie außerdem das zu verwendende Objekt Settings, und bieten Sie dann die kombinierten Eigenschaften an. Das fühlt sich auch sehr hässlich an, da ich die gesamte Objekthierarchie des Modells replizieren müsste. (Im Beispiel ViewA benötigt eine Liste von ViewB s bieten, von denen jede ein Wörterbuch, wo die Werte der ViewC s entspricht.)

  • Wait for Microsoft to bring MultiBinding back. Unluckily, ich bin die erforderliche Optimismus fehlt.

Was sind saubere Möglichkeiten, dies in einer UWP-Anwendung zu tun?

Antwort

4

Es stimmt, dass Multibinding auf den neuen Win-Dev-Stacks nicht verfügbar war. ABER Cimbalino toolkit hat es seit frühen wp8 Tagen gehabt. Es hat auch einen UWP-Port.

Also vielleicht versuchen Sie das!

Blogpost aus den frühen Tagen erklärt, die Verwendung: https://www.pedrolamas.com/2013/05/17/cimbalino-windows-phone-toolkit-multibindingbehavior/ Habhaft Cimbalino durch nuget getan und hier ist auf Github https://github.com/Cimbalino/Cimbalino-Toolkit

+0

Das sieht vielversprechend aus, danke! Ich werde das bald untersuchen. – fefrei

+0

Ich hoffe, es wird Ihr Problem beheben :) – Depechie

+0

Es funktioniert tatsächlich! Zur Entwurfszeit zeigt der XAML-Parser dennoch einen Fehler an ('collection-Eigenschaft __implicit_items ist null'). Hast du eine Ahnung warum? – fefrei