J'applique le modèle MVVM. J'ai un bouton qui, lorsqu'on clique dessus, appelle une commande déléguée dans mon ViewModel. Au tout début de cette méthode de délégué, j'ai défini une valeur de propriété (WaitOn) qui doit informer l'utilisateur dans l'interface utilisateur pour qu'il attende en affichant un contrôle animé. Cependant, la liaison pour afficher ce contrôle animé n'est pas actualisée jusqu'à ce que le délégué ait terminé son exécution, moment auquel l'attente est terminée. Pourquoi cela arrive-t-il et que dois-je faire pour le contourner?Pourquoi l'actualisation de liaison est-elle retardée jusqu'à l'achèvement de la commande de délégué? (MVVM)
Exemple XAML:
<Button Command="{Binding DoStuffCommand}" />
<ctl:MyAnimatedControl Name="ctlWait" Caption="Please Wait..."
Visibility="{Binding WaitNotification}" />
Snippets de ViewModel:
public bool WaitPart1On
{
get { return _waitPart1On; }
set
{
_waitPart1On = value;
if (_waitPart1On == true)
{
WaitNotification = "Visible";
}
else
{
WaitNotification = "Hidden";
}
RaisePropertyChanged("WaitPart1On");
}
}
public string WaitNotification
{
get { return _waitNotification; }
set
{
_waitNotification = value;
RaisePropertyChanged("WaitNotification");
}
}
public void DoStuff()
{
WaitPart1On = true;
//Do lots of stuff (really, this is PART 1)
//Notify the UI in the calling application that we're finished PART 1
if (OnFinishedPart1 != null)
{
OnFinishedPart1(this, new ThingEventArgs(NewThing, args));
}
WaitPart1On = false;
}
Et maintenant, code-behind de la XAML pour attraper l'événement déclenché:
public void Part1FinishedEventHandler(NewThing newThing, ThingEventArgs e)
{
//at this point I expected the WaitPart1On to be set to false
//I planned to put a new wait message up (WaitPart2)
FinishPart2();
}
Je suis content que vous ayez réussi. Je me demande simplement si le casting de 'Action' est strictement nécessaire, je suis sûr que la syntaxe lambda aurait pris soin de cela pour vous ... – Rory