J'ai un ViewModel qui étend Galasoft.MvvmLight.ViewModelBase. J'y ai ceci:La collection observable dans MVVMLIght ne met pas à jour l'interface utilisateur
public ObservableCollection<Association> Delegation { get; set; }
private async void LoadDelegations()
{
Delegation.Clear();
var delegations = await NetworkManager.GetDelegations();
if(delegations== null)
{
return;
}
for (int i = 0;i< delegations.Count;i++)
{
Delegation.Add(delegations[i]);
}
}
private async void RemoveDelegation(string delegationId)
{
var response = await NetworkManager.RemoveDelegation(delegationId);
if (response.Result)
{
int i;
for (i = 0; i < Delegation.Count; i++)
{
if (Delegation[i].Id == delegationId) break;
}
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() =>
{
Delegation.RemoveAt(i);
});
}
}
Cette propriété est liée à un ListView:
<ListView ItemTemplate="{StaticResource AssociationTemplate}"
ItemsSource="{Binding Delegation}"/>
Mon problème est que LoadDelegation jour l'interface utilisateur que parfois, au lieu de la RemoveDelegation jamais mettre à jour l'interface utilisateur.
Qu'est-ce que je fais mal?
Je ne vois pas où vous créez la collection. Vous pouvez le créer après l'exécution de la liaison, vous devez donc émettre un événement PropertyChanged pour notifier l'interface utilisateur. (Je ne suis pas familier avec Galasoft.MvvmLight si.) –
Pourquoi auriez-vous besoin d'un Dispatcher.RunAsync dans une méthode 'async void'? Quelque chose ne sent pas bon. –
Je crée le constructeur Collection in ViewModel. Dispatcher.RunAsync permet à cette instruction de s'exécuter sur le thread UI, n'est-ce pas? –