¿Cuáles son los distintos modos de enlace de WPF?

86

No entiendo los diversos modos de enlace de datos en WPF, como:

  • Un camino
  • Bidireccional
  • Una vez
  • etc ...

¿Qué significa cada uno de estos modos?

¿Cuándo deben usarse?

DATT OZA
fuente

Respuestas:

159
  • OneWay: Use esto cuando desee que la propiedad vinculada actualice la interfaz de usuario.
  • TwoWay: Tiene el mismo comportamiento que OneWayy OneWayToSourcecombinado. La propiedad vinculada actualizará la interfaz de usuario y los cambios en la interfaz de usuario actualizarán la propiedad vinculada ( por ejemplo , usaría esto con a TextBoxo a Checkbox).
  • OneTime: Tiene el mismo comportamiento que OneWayexcepto que solo actualizará la interfaz de usuario una vez. Esta debería ser su opción predeterminada para el enlace (por varias razones que no detallaré aquí), solo debe usar otros tipos de enlaces si realmente necesita la funcionalidad adicional.
  • OneWayToSource: Esto es lo opuesto a OneWay: los cambios en el valor de la interfaz de usuario actualizan la propiedad vinculada.

Si no especifica nada, entonces el comportamiento dependerá del control que esté utilizando.

Para obtener más información, consulte la BindingModeenumeración en MSDN .

Dave
fuente
Gracias. es útil ... Pero por favor especifique el ejemplo de TwoWay ... quiero saber cómo refleja el código subyacente.
DATT OZA
2
@DATT: ¿a qué te refieres con "especificar"? Básicamente, si establece Mode = TwoWay en el XAML, cuando cambie el valor de la GUI, se actualizará automáticamente la propiedad C #. Pero su propiedad en el código subyacente debe implementarse en una clase (como un ViewModel) que implemente la interfaz INotifyPropertyChanged. Cuando el código subyacente cambia el valor de la propiedad mediante set, debe llamar a PropertyChanged para que la GUI sea notificada del cambio de valor y se actualice automáticamente.
Dave
1
Si no especifica nada, el comportamiento dependerá de la PROPIEDAD que esté utilizando.
Mauro Sampietro
37

Un enlace consta de dos entidades:

  1. La fuente (normalmente, ViewModel en escenarios MVVM)
  2. El objetivo (el control de la interfaz de usuario)

El destino tiene que ser un DependencyObject(para que el enlace funcione) y el origen puede ser un DependencyObjecto debería tener algún mecanismo para imitar el sistema de enlace de WPF sobre su cambio ( INotifyPropetyChnagedinterfaz de implementación ).


MVVM recomienda que el proyecto ViewModel esté libre de referencias relacionadas con la vista y, por lo tanto, se recomienda utilizar la INotifyPropertyChangedinterfaz para hacer que el enlace WPF escuche el objeto de origen. La vinculación ocurre entre una propiedad de Source y una propiedad de Target (tiene que ser a DependencyProperty). por ejemplo, el TextPropertyde la TextBoxclase es DataBound a (digamos) UserNamepropiedad del modelo de vista. El enlace WPF ofrece cuatro tipos de enlace. Recuerde, Binding se ejecuta en el subproceso de la interfaz de usuario a menos que especifique lo contrario.

  1. OneWay : la propiedad de destino escuchará el cambio de la propiedad de origen y se actualizará. Si cambia mediante programación la UserNamepropiedad de ViewwModel , se reflejará en el cuadro de texto. Esto tiene un costo intermedio ya que el sistema de encuadernación solo busca cambios en la Fuente .
  2. TwoWay : la propiedad de destino escuchará el cambio de la propiedad de origen y se actualizará. Y la propiedad de origen escuchará el cambio de la propiedad de destino y se actualizará. Tanto el TextPropertyy la UserNamepropiedad se mantendrá en sincronía y se actualizará entre sí, si uno cambia. Esto es más costoso ya que el sistema de encuadernación tiene que vigilar a ambos lados para detectar cambios.
  3. OneWayToSource : la propiedad de origen cambiará si se cambia la propiedad de destino. Si el usuario cambia TextProperty, la UserNamepropiedad tomará el valor cambiado. De nuevo, esto tiene un costo intermedio ya que el sistema de encuadernación solo observa a Target en busca de cambios.
  4. Una vez : esto ocurre solo una vez durante la vida útil del enlace, la propiedad de destino se actualizará con la propiedad de origen cuando se produzca el enlace. Esto es menos costoso y es aconsejable para escenarios en los que se muestran datos estáticos, por ejemplo Label, TextBlocketc.

Si no menciona nada, cada propiedad de destino tiene un modo de enlace predeterminado asociado a sí misma. Por ejemplo, el TextPropertyde a TextBoxtiene un modo de enlace predeterminado como TwoWay. Para el TextPropertyde TextBlockes una forma.

Es aconsejable que elija el modo correcto, ya que puede ayudarlo a reducir la latencia de la aplicación, especialmente en los casos en que tiene una gran cantidad de controles en su interfaz de usuario.

Para obtener más información sobre MVVM, aquí hay un artículo escrito por mí.

James
fuente