2016-07-15 1 views
-2

J'ai un contrôle avec un DependencyProperty de type TimeSpan. Lorsque j'essaie de lier à cette propriété, la valeur n'est pas mise à jour.WPF Binding TwoWay ne fonctionne pas, OneWayToSource fonctionne. POURQUOI?

Utilisation du contrôle:

<controls:TimeControl Time={Binding SomeTimeSpanProperty} /> 

Quand je change la valeur du temps dans le contrôle, le changement est pas mis à jour dans le SomeTimeSpanProperty. Toutefois, si je change le {Binding SomeTimeSpanProperty} en {Binding SomeTimeSpanProperty, Mode = OneWayToSource}, il est mis à jour.

+0

Pourquoi tant de downwotes? Qu'est-ce qui est/était incorrect avec la question? – GregaMohorko

Répondre

0

J'ai trouvé la solution. Si quelqu'un lisant ceci dans le futur veut savoir ce que c'était:

Je devais définir explicitement le mode de la liaison à TwoWay, parce que le mode de liaison par défaut pour la propriété de type TimeSpan est OneWay.

de ceci:

<controls:TimeControl Time={Binding SomeTimeSpanProperty} /> 

à ceci:

<controls:TimeControl Time={Binding SomeTimeSpanProperty,Mode=TwoWay} /> 

Et maintenant, il fonctionne !

+2

Dans WPF, la valeur par défaut de la propriété 'Binding.Mode' est [' BindingMode.Default'] (https://msdn.microsoft.com/en-us/library/system.windows.data.bindingmode (v = vs.110) .aspx). Cela peut sembler bizarre, mais cela signifie que Binding "* utilise la valeur Mode par défaut de la cible de liaison.La valeur par défaut varie pour chaque propriété de dépendance.En général, les propriétés de contrôle modifiables par l'utilisateur, telles que celles des zones de texte et des cases à cocher , par défaut à des liaisons bidirectionnelles, tandis que la plupart des autres propriétés par défaut à des liaisons à sens unique. * " – Clemens

+0

Merci, j'ai oublié cela. – GregaMohorko