OneWay
: Use esto cuando desee que la propiedad vinculada actualice la interfaz de usuario.
TwoWay
: Tiene el mismo comportamiento que OneWay
y OneWayToSource
combinado. 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 TextBox
o a Checkbox
).
OneTime
: Tiene el mismo comportamiento que OneWay
excepto 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 BindingMode
enumeración en MSDN .
Un enlace consta de dos entidades:
El destino tiene que ser un
DependencyObject
(para que el enlace funcione) y el origen puede ser unDependencyObject
o debería tener algún mecanismo para imitar el sistema de enlace de WPF sobre su cambio (INotifyPropetyChnaged
interfaz 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
INotifyPropertyChanged
interfaz 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 aDependencyProperty
). por ejemplo, elTextProperty
de laTextBox
clase es DataBound a (digamos)UserName
propiedad 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.UserName
propiedad 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 .TextProperty
y laUserName
propiedad 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.TextProperty
, laUserName
propiedad 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.Label
,TextBlock
etc.Si no menciona nada, cada propiedad de destino tiene un modo de enlace predeterminado asociado a sí misma. Por ejemplo, el
TextProperty
de aTextBox
tiene un modo de enlace predeterminado comoTwoWay
. Para elTextProperty
deTextBlock
es 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í.
fuente