La mia casella combinata per i valori booleani dovrebbe essere in code-behind o nel mio viewmodel?

1

Mi sono imbattuto in un disaccordo con un mio collega sull'implementazione di rappresentare un valore booleano in un ComboBox usando Xaml e MVVM. Attualmente, il mio viewmodel è molto semplice. Ho un bool? che mi dice se alcune impostazioni sono abilitate, ed è nullable che viene usato come metodo per marcare il valore come "ereditato" dall'alto.

public class SomeViewModel : ViewModelBase
{
    // Simplified -- Really implements INPC
    public bool? IsSettingEnabled { get; set; }
}

Attualmente, il nostro Xaml è semplice. Abbiamo una casella di controllo TriState, tuttavia questo non è il modo più user-friendly per trasmettere i significati completi. Invece, vogliamo mostrare un ComboBox con i valori { { "Inherited", null }, { "Yes", true }, { "No", false } } . Questo sembra funzionare molto bene:

<ComboBox ItemsSource="{Binding Path=BooleanOptions, Mode=OneTime}"
          SelectedValue="{Binding Path=IsSettingEnabled}"
          SelectedValuePath="Value"
          DisplayMemberPath="Key" />

Il disaccordo che stiamo avendo è dove dovrebbe venire la proprietà BooleanOptions ? Siamo d'accordo che dovrebbe essere un IReadOnlyDictionary<string, bool?> , ma se rispettiamo un pattern strict mvvm , allora la proprietà dovrebbe far parte del viewmodel o dovrebbe far parte del code-behind della vista?

Caveat: mi rendo conto che se è parte del codice della vista, il binding deve essere regolato in modo da puntare alla vista come DataContext: ItemsSource="{Binding Path=BooleanOptions, Mode=OneTime, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Control}}}" .

    
posta m-y 01.06.2015 - 20:21
fonte

0 risposte

Leggi altre domande sui tag