2014-12-09 13 views
6

Oggi aggiorno un'app di Windows Store in base alla modifica del progetto dell'interfaccia utente. Una delle modifiche è la sostituzione di CheckBox con un ToggleSwitch.È richiesto "Mode = Twoway" esplicito per Toggleswitch

modo che il codice viene aggiornato dal

<CheckBox IsChecked="{Binding BooleanProperty}" ... 

a

<ToggleSwitch IsOn="{Binding BooleanProperty"} ... //does not update data source 

Poi ho notato che la commutazione ToggleSwitch non aggiorna il sottostante BooleanProperty, devo aggiungere Mode=TwoWay per farlo funzionare.

<Toggleswitch IsOn="{Binding BooleanProperty, Mode=TwoWay"} ... //update data source 

Da quello che ho imparato in WPF, non è necessario impostare in modo esplicito Mode=TwoWay sulla proprietà IsChecked di CheckBox, perché è TwoWay per impostazione predefinita.

In generale, le proprietà di controllo modificabili dall'utente, come quelle delle caselle di testo e delle caselle di controllo, sono predefinite per le associazioni bidirezionali, mentre la maggior parte delle altre proprietà predefinite per le associazioni unidirezionali.

E ho pensato che ToggleSwitch è solo un altro CheckBox con supporto touch migliore, ed è disponibile solo su Windows Store e Windows Phone.

Perché ToggleSwitch.IsOn non è l'impostazione predefinita per il binding TwoWay? Ci sono altre differenze tra un CheckBox e un ToggleSwitch?

risposta

3

Il problema è che Microsoft ha cambiato un sacco di cose quando hanno creato la versione "Windows 8" di WPF. Un sacco di roba cambiato, compreso la modalità predefinita per gli attacchi:

Il valore predefinito è OneWay: la fonte aggiorna il bersaglio, ma modifiche al il valore di riferimento non aggiornare l'origine.

(MSDN)

considerando che WPF:

Uno dei valori BindingMode. L'impostazione predefinita è Default, che restituisce il valore della modalità di associazione predefinita della proprietà di dipendenza di destinazione. Tuttavia, il valore predefinito varia per ogni proprietà di dipendenza. In proprietà di controllo generali modificabili dall'utente, come quelle delle caselle di testo e caselle di controllo, predefinite per le associazioni bidirezionali, mentre la maggior parte delle altre proprietà predefinite per le associazioni unidirezionali.

Un modo programmatico per determinare se una proprietà di dipendenza si lega unidirezionale o bidirezionale per predefinito è quello di ottenere i metadati di proprietà della struttura utilizzando GetMetadata e quindi controllare il valore booleano della proprietà BindsTwoWayByDefault .

(MSDN)

+0

++, ma non sono sicuro di questa parte: "È possibile che alcuni controlli/proprietà sovrascrivano questo comportamento" - la dicitura MSDN suggerisce che il valore predefinito sia sempre "OneWay". – McGarnagle

+1

@McGarnagle D'accordo, l'ho messo lì perché .NET può essere sempre strano e fare uno off. Non ha davvero bisogno di essere lì però – BradleyDotNET

0

Secondo la mia esperienza, ToggleSwitch e il CheckBox sono entrambi utilizzati per passare da uno stato all'altro. Ovviamente, ToggleSwitch viene utilizzato nelle app di Windows Store e Windows Phone. Forse, ToggleSwich è più simile a un semplice ToggleButton che a un CheckBox ... Un'altra differenza è che il CheckBox può essere cancellato ma il ToggleSwitch è sempre attivato o disattivato.

In ogni caso, suggerisco di impostare esplicitamente la modalità dell'associazione in tutti i casi.

+0

sì, mi sento 'Mode = TwoWay' è _better_ aggiunto al codice dal momento che non sono sicuro se la vecchia regola del collegamento WPF si applica al nuovo' UI' moderna cose. – kennyzx

Problemi correlati