In WPF, dovrei basare i miei convertitori su tipi o casi d'uso?

3

Sto cercando dei consigli su come scrivere i miei convertitori di valore WPF. Il modo in cui li sto attualmente scrivendo sono molto specifici, come (bool?, Bool) = > Pennello, cioè sto scrivendo ogni convertitore per un caso d'uso specifico, in questo caso il pennello è associato a un indicatore che mostra le informazioni sull'uguaglianza tra il bool? e il bool. Questo ovviamente rende molto difficile il riutilizzo e finisco con un elenco piuttosto ampio di convertitori.

Dovrei sforzarmi di scrivere i miei convertitori in un modo più generale? Posso?

    
posta Mårten 22.08.2014 - 08:10
fonte

2 risposte

0

Ho risolto questo problema scrivendo un multiconvertitore generico che può prendere espressioni e valutarle, poiché è una multibinding, aggiornerà il valore ogni volta che una delle fonti viene aggiornata, significa anche che raramente devo scrivere nuovi convertitori a tutti. L'unica spesa è la verbosità xaml. Un esempio di un'espressione:

<CheckBox Content="{Binding Role.Name_SV}">
    <CheckBox.Background>
         <MultiBinding Converter="{StaticResource ArithmeticsConverter}">
              <Binding Source="?"/>
              <Binding Source=">="/>
              <Binding Path="Included"/>
              <Binding Path="Requirement"/>
              <Binding>
                   <Binding.Source>
                        <SolidColorBrush>LightGreen</SolidColorBrush>
                   </Binding.Source>
              </Binding>
              <Binding>
                   <Binding.Source>
                        <SolidColorBrush>Red</SolidColorBrush>
                   </Binding.Source>
              </Binding>                
         </MultiBinding>
     </CheckBox.Background>
 </CheckBox>

La funzione qui è che il colore di sfondo della casella di controllo è LightGreen se Incluso > = Requisito e Rosso altrimenti.

Credo che alcune persone lo trovino orribilmente brutto, ma mi piace piuttosto come mi permette di descrivere ciò che voglio senza dovermi preoccupare di quando le cose vengono aggiornate, è più dichiarativo e meno imperativo.

Se qualcuno è interessato posso pubblicare il codice sorgente per il convertitore.

    
risposta data 20.03.2015 - 15:51
fonte
1

Prima prova a manipolare la tua origine dati per esporre i dati in un modo che corrisponda meglio alla tua GUI. Quindi non avrai bisogno di tanti convertitori in primo luogo. Nel pattern MVVM ViewModel è una rappresentazione del modello che è più adatta per il binding dalla vista.

Quindi direi di provare a creare convertitori incentrati sui dati, in cui i convertitori sono progettati in base ai tipi di dati di input e output. La creazione di convertitori su misura per casi d'uso specifici ti consentirà di creare molti convertitori ridondanti.

    
risposta data 20.03.2015 - 16:12
fonte

Leggi altre domande sui tag