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?
Respostas:
OneWay
: Use quando quiser que a propriedade vinculada atualize a interface do usuário.TwoWay
: Tem o mesmo comportamento que OneWay
e OneWayToSource
combinado. 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 TextBox
ou um, Checkbox
por exemplo).OneTime
: Tem o mesmo comportamento, OneWay
exceto 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 BindingMode
enum no MSDN .
Uma vinculação consiste em duas entidades:
O destino deve ser a DependencyObject
(para que a ligação funcione) e a origem pode ser a DependencyObject
ou deve ter algum mecanismo para imitar o sistema WPF Binding sobre a alteração ( INotifyPropetyChnaged
interface de implementação ).
O MVVM recomenda que o projeto ViewModel esteja livre de quaisquer referências relacionadas a View e, portanto, é recomendado usar a INotifyPropertyChanged
interface 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 TextProperty
da TextBox
classe é DataBound para (digamos) UserName
propriedade 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.
UserName
propriedade 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 .TextProperty
quanto a UserName
propriedade 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.TextProperty
, a UserName
propriedade assumirá o valor alterado. Novamente, isso tem um custo intermediário, pois o sistema de vinculação observa apenas as alterações no Destino .Label
, por exemplo , TextBlock
etc.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 TextProperty
de a TextBox
tem o modo de ligação padrão como TwoWay
. Para o TextProperty
of 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.