Quais são os vários modos de vinculação WPF?

86

Não entendo os vários modos de vinculação de dados no WPF, como:

  • Mão Única
  • Mão dupla
  • Um tempo
  • etc ...

O que cada um desses modos significa?

Quando devem ser usados?

DATT OZA
fonte

Respostas:

159
  • OneWay: Use quando quiser que a propriedade vinculada atualize a interface do usuário.
  • TwoWay: Tem o mesmo comportamento que OneWaye OneWayToSourcecombinado. A propriedade vinculada atualizará a interface do usuário e as alterações na interface do usuário atualizarão a propriedade vinculada (você usaria isso com um TextBoxou um, Checkboxpor exemplo).
  • OneTime: Tem o mesmo comportamento, OneWayexceto que só atualizará a interface do usuário uma vez. Esta deve ser sua escolha padrão para vinculação (por vários motivos, não vou entrar em detalhes aqui), você só deve usar outros tipos de vinculação se realmente precisar da funcionalidade extra.
  • OneWayToSource: Este é o oposto de OneWay- as alterações nos valores da interface do usuário atualizam a propriedade vinculada.

Se você não especificar nada, o comportamento dependerá do controle que você está usando.

Para obter mais informações, consulte BindingModeenum no MSDN .

Dave
fonte
Obrigado. é útil ... Mas por favor especifique o exemplo TwoWay ... eu quero saber como ele reflete o code-behind.
DATT OZA
2
@DATT: o que você quer dizer com "especificar"? Basicamente, se você definir Mode = TwoWay no XAML, ao alterar o valor da GUI, ele atualizará automaticamente a propriedade C #. Mas sua propriedade no code-behind precisa ser implementada em uma classe (como um ViewModel) que implementa a interface INotifyPropertyChanged. Quando o code-behind muda o valor da propriedade via set, você precisa chamar PropertyChanged para que a GUI seja notificada da mudança de valor e ela se atualize automaticamente.
Dave de
1
Se você não especificar nada, o comportamento dependerá da PROPRIEDADE que você está usando.
Mauro Sampietro
37

Uma vinculação consiste em duas entidades:

  1. A fonte (normalmente o ViewModel em cenários MVVM)
  2. O alvo (o controle da IU)

O destino deve ser a DependencyObject(para que a ligação funcione) e a origem pode ser a DependencyObjectou deve ter algum mecanismo para imitar o sistema WPF Binding sobre a alteração ( INotifyPropetyChnagedinterface de implementação ).


O MVVM recomenda que o projeto ViewModel esteja livre de quaisquer referências relacionadas a View e, portanto, é recomendado usar a INotifyPropertyChangedinterface para fazer o objeto Source sendo ouvido pela vinculação WPF. A vinculação acontece entre uma propriedade de Source e uma propriedade de Target (tem que ser a DependencyProperty). por exemplo, The TextPropertyda TextBoxclasse é DataBound para (digamos) UserNamepropriedade do modelo de exibição. A encadernação WPF oferece quatro tipos de encadernação. Lembre-se de que o Binding é executado no thread de IU, a menos que você especifique que ele seja executado de outra forma.

  1. OneWay : a propriedade target ouvirá a propriedade source que está sendo alterada e se atualizará. Se você alterar programaticamente a UserNamepropriedade do ViewwModel , ela refletirá na caixa de texto. Isso tem um custo intermediário, pois o sistema de encadernação observa apenas as alterações na Origem .
  2. TwoWay : A propriedade target ouvirá a propriedade source sendo alterada e se atualizará. AND A propriedade de origem ouvirá a propriedade de destino sendo alterada e se atualizará. Tanto o TextPropertyquanto a UserNamepropriedade permanecerão sincronizados e se atualizarão se houver alteração. Isso é mais caro, pois o sistema de vinculação deve observar mudanças em ambos os lados.
  3. OneWayToSource : a propriedade Source será alterada se a propriedade target for alterada. Se o usuário alterar o TextProperty, a UserNamepropriedade assumirá o valor alterado. Novamente, isso tem um custo intermediário, pois o sistema de vinculação observa apenas as alterações no Destino .
  4. OneTime : Isso acontece apenas uma vez durante o tempo de vida do Binding, a propriedade Target será atualizada com a propriedade Source quando o Binding acontecer. Isso é menos caro e é aconselhável para cenários onde você tem dados estáticos a serem mostrados Label, por exemplo , TextBlocketc.

Se você não mencionar nada, cada propriedade de destino tem um modo de ligação padrão associado a si mesma. Por exemplo, o TextPropertyde a TextBoxtem o modo de ligação padrão como TwoWay. Para o TextPropertyof a TextBlock, é um caminho.

É aconselhável que você escolha o modo correto, pois pode ajudá-lo a reduzir a latência do aplicativo, especialmente nos casos em que você tem um grande número de controles em sua IU.

Para saber mais sobre MVVM, aqui está um artigo escrito por mim.

James
fonte