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 alsConverterProperty
übergeben. DieConverterProperty
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 BeispielViewA
benötigt eine Liste vonViewB
s bieten, von denen jede ein Wörterbuch, wo die Werte derViewC
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?
Das sieht vielversprechend aus, danke! Ich werde das bald untersuchen. – fefrei
Ich hoffe, es wird Ihr Problem beheben :) – Depechie
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