2015-12-09 13 views
5

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 come ConverterProperty. Tuttavia, lo ConverterProperty è 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 di ViewB s, ognuno dei quali hanno un dizionario in cui i valori sono le corrispondenti ViewC 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?

risposta

4

Vero che il multibinding non è stato in giro sui nuovi stack di sviluppo. MA il toolkit Cimbalino lo ha avuto sin dai primi giorni di wp8. Ha anche una porta UWP.

Quindi forse provatelo!

Blogpost dai primi giorni che spiegano l'uso: https://www.pedrolamas.com/2013/05/17/cimbalino-windows-phone-toolkit-multibindingbehavior/ entrare in possesso di Cimbalino viene fatto attraverso NuGet ed è disponibile su Github qui https://github.com/Cimbalino/Cimbalino-Toolkit

+0

Questo sembra essere molto promettente, grazie! Lo esaminerò presto. – fefrei

+0

Spero che risolverà il tuo problema :) – Depechie

+0

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

Problemi correlati