In un progetto C#, ho un modello complesso che utilizza molte classi annidate in elenchi e dizionari (ad esempio l'oggetto A
ha un elenco di istanze di B
, che hanno un dizionario in cui i valori sono istanze di C
). In una delle mie pagine, questo modello è mostrato in una vista complessa usando nidificato ItemsControl
s.Associazione a più proprietà in UWP
Inoltre, esiste una classe Settings
che memorizza le preferenze dell'utente, alcune delle quali sono associate alle caselle di controllo sulla pagina.
Ora, desidero associare le proprietà di alcuni controlli all'interno di DataTemplate
a una combinazione di una proprietà di modello e un'impostazione. Ad esempio, supponiamo che C
disponga di una proprietà IsBoring
e che ci siano impostazioni Settings.HideBoringStuff
. Voglio legare la visibilità dello TextBlock
che rappresenta C
alla combinazione ovvia di queste proprietà.
Non ho idea di come farlo senza brutti hack. Ecco alcune delle mie idee e perché non funzionano:
Utilizzare un
MultiBinding
, che è specificamente progettato per fare questo. Tuttavia,MultiBinding
non è disponibile nei progetti UWP.Bind to multiple properties on the page that implement the logic in their getters and setters. Questo non funziona perché sono all'interno di un
DataTemplate
, quindi ho bisogno di più copie indipendenti di questa logica.Utilizzare un
Converter
per convertire la proprietà del modello, passando l'impostazione comeConverterProperty
. Tuttavia, loConverterProperty
è noDependencyProperty
e pertanto non può essere associato.Costruire le proprietà necessarie direttamente nel modello –
Settings
è un singleton in ogni caso. Questo mi sembra davvero brutto, dato che dovrei mescolare dipendenze non necessarie e visualizzare la logica nel mio modello.Creare classi separate che avvolgono le classi del modello, inoltre memorizzare l'oggetto
Settings
da utilizzare e quindi offrire le proprietà combinate. Anche questo mi sembra davvero brutto, in quanto avrei bisogno di replicare l'intera gerarchia degli oggetti del modello. (Nell'esempio,ViewA
ha bisogno di offrire un elenco diViewB
s, ognuno dei quali hanno un dizionario in cui i valori sono le corrispondentiViewC
s.)Wait for Microsoft to bring
MultiBinding
back. Purtroppo, mi manca l'ottimismo necessario.
Quali sono i modi puliti per eseguire questa operazione in un'applicazione UWP?
Questo sembra essere molto promettente, grazie! Lo esaminerò presto. – fefrei
Spero che risolverà il tuo problema :) – Depechie
In realtà funziona! Tuttavia, in fase di progettazione, il parser XAML mostra un errore ('property collection __implicit_items is null'). Hai qualche idea del perché? – fefrei