Je n'arrive pas à comprendre, comment puis-je lier deux propriétés personnalisées entre View et ViewMode avec le mode bidirectionnel. abord je dois un mêmes ViewModel semblable:Mvvmcross Liaison bidirectionnelle entre propriétés personnalisées
//ViewModel
public class MyViewModel : MvxViewModel
{
....
private MyMode _testA
public MyMode TestA
{
get => _testA;
set {
_testA = value;
RaisePropertyChanged(()=> TestA);
}
}
public MyViewModel()
{
TestA = MyMode.A;
}
........
}
Dans Voir Je ne lient avec ma propriété personnalisée:
//View
public partial class MyView : MvxViewController<MyViewModel>
{
public MyMode UiTestA
private void SetBiding()
{
var set = this.CreateBindingSet<MyView, MyViewModel>();
set.Bind(this).For(x => x.UiTestA()).To(vm => vm.TestA);
set.Apply();
}
private void SomeMethod()
{
var t1 = UiTestA; // t1 = MyMode.A;
UiTestA = MyMode.B; // Two way binding?
var t2 = ViewModel.TestA; // MyMode.A;
}
}
Si je change Testa ViewModel, je peux obtenir cette perspective, je Voulez-vous le changer dans View et trouver une nouvelle valeur dans ViewModel.
Pour clarifier ce Cheesebaron répondu, la raison pour laquelle la propriété VM n'a pas été mise à jour était parce que rien n'a déclenché une notification de modification du côté View. Dans votre machine virtuelle, vous utilisez RaisePropertyChanged. Du côté de la vue, vous allez créer TargetBinding comme ci-dessous. La raison pour laquelle Mvx fonctionne hors de la boîte est que des choses comme Text et Click ont des liaisons déjà définies dans le framework Mvx. – Kiliman