Ottieni / Imposta proprietà in una classe vs IValueConverter

2

Quindi ho esaminato parte del mio vecchio codice dal momento in cui stavo imparando le basi di wpf e ho trovato qualcosa di interessante.

Ho avuto una lezione nel formato seguente

public class TempClass
{
    public bool IsValued { get; set; }
    private SolidColorBrush _isValuedColour;
    public SolidColorBrush IsValuedColor
    get
    {
        if (this.IsValued)
        {
            _accepted = new SolidColorBrush(Colors.DarkGreen);
        }
        else
        {
            _accepted = new SolidColorBrush(Colors.Transparent);
        }
        return _accepted;
    }
    set { _accepted = value; }
}

Se vedi, ho creato un SolidColorBrush basato sulla mia proprietà IsValued per restituire una proprietà color. Questo codice era del 2013 e credo di aver iniziato a imparare in questo modo, forse a causa dei siti web che stavo passando per imparare xaml

Vieni 2015 ho controllato un altro progetto e ho notato che ho iniziato a usare IValueConverter Sono riuscito a ottenere lo stesso senza creare una nuova proprietà.

<Button Foreground="{Binding IsValued, Converter={StaticResource boolConverter}}">

ed ecco la mia implementazione.

class BoolToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        SolidColorBrush brush = new SolidColorBrush();
        if ((bool)value)
        {
            brush = new SolidColorBrush(Colors.Gold);
        }
        else
        {
            brush = new SolidColorBrush(Colors.Transparent);
        }
        return brush;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Mentre entrambi fanno il lavoro per me, vorrei sapere quale percorso è migliore. La creazione di una nuova proprietà con getter e setter è un buon metodo o utilizzare i convertitori in modo corretto?

Grazie per avermi illuminato.

    
posta AVK 10.09.2016 - 19:08
fonte

1 risposta

3

Se si tratta di un problema di presentazione, vai al convertitore.

Se si tratta di un problema aziendale, aggiungi una proprietà all'oggetto dominio.

Un colore è quasi sempre una preoccupazione per la presentazione. Potrebbe trattarsi di un problema di dominio se il colore esatto ha un significato profondo per il business.

Quindi andrei al convertitore a meno che non avessi un motivo molto specifico per avere il colore nel dominio.

Aggiorna

Dal punto di vista della metodologia di codifica, questa è un'applicazione del principio di responsabilità singola , la S in SOLIDO. La vista dovrebbe cambiare solo quando cambia la specifica della presentazione, l'oggetto business dovrebbe cambiare solo quando cambiano le regole aziendali.

Se il colore fa parte delle regole aziendali, una modifica delle specifiche del colore deve cambiare l'oggetto business, quindi il colore è un getter nell'oggetto business.

Normalmente, devi cambiare la vista (e non il convertitore). L'utilizzo di alcuni convertitori bool-to-value riutilizzabili dovrebbe consentire questo:

<Brush x:Key="GoldBrush">Gold</Brush>
<Brush x:Key="TransparentBrush">Transparent</Brush>
<controls:BoolToValueConverter x:Key="xxxColorConverter"
    TrueConvertValue="{StaticResource GoldBrush}" 
    FalseConvertValue="{StaticResource TransparentBrush}"/>
    
risposta data 12.09.2016 - 21:40
fonte

Leggi altre domande sui tag