2009-09-07 11 views
8

Aquí hay un pequeño fragmento de XAML. Verá¿Por qué el enlace de datos se rompe en el modo OneWay?

<StackPanel> 
    <TextBox x:Name="txtValue">250</TextBox> 
    <Slider x:Name="slide" 
      Value="{Binding ElementName=txtValue, Path=Text, 
          Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" 
      Minimum="0" Maximum="500"></Slider> 
</StackPanel> 
  1. cuando cambia el valor de texto, las actualizaciones deslizante
  2. Si cambia el valor del control deslizante de forma explícita, el comportamiento anterior rompe paradas alias de trabajo.

Si quito la directiva Mode=OneWay juego, (por defecto es de dos vías) todo funciona perfectamente.

¿Por qué sucede esto?

Respuesta

3

Sus datos no se rompe la unión, pero desactivadas (http://en.wikipedia.org/wiki/Euphemism):

System.Windows.Data Warning: 75 : BindingExpression (hash=52697953): Deactivate 
System.Windows.Data Warning: 99 : BindingExpression (hash=52697953): Replace item at level 0 with {NullDataItem} 
System.Windows.Data Warning: 59 : BindingExpression (hash=52697953): Detach 

Ajuste del nivel de seguimiento de alta producirá este mensaje en la ventana de salida VS en caso de que mueve el indicador:

<Slider xmlns:trace="clr-namespace:System.Diagnostics;assembly=WindowsBase" 
     Value="{Binding trace:PresentationTraceSources.TraceLevel=High, 
      ElementName=txtValue, Path=Text, Mode=OneWay, 
      UpdateSourceTrigger=PropertyChanged}" 
     Minimum="0" Maximum="500"></Slider> 
+5

¿Por qué se separa? De alguna manera, se frustra el propósito del enlace unidireccional si hacer algo como mover el pulgar en el control vinculado desactiva o desengancha el enlace. Por roto, quise decir que el comportamiento esperado ya no se ve. – Gishu

+0

Así es como se implementa :-( Si no cumple con sus necesidades, no use el enlace de datos de WPF. –

12

Use mode=TwoWay y configure UpdateSourceTrigger=Explicit.

+7

Esto funciona ... pero no explica ninguno de los motivos. – Beska

Cuestiones relacionadas