2014-05-05 2 views
0

J'ai une liste sur ma page XAML liée à mon ViewModel. La liste N'affiche que les entrées - il n'y a pas de fonction à éditer ou à mettre à jour (elles sont lues depuis l'API du serveur).Mise à jour du contenu ViewModel dans MVVM

Dans la barre d'application, j'ai un bouton pour recharger la liste (envoyer à nouveau la demande au serveur). Que dois-je faire pour cette fonction "recharger"?

Je pense à ce qui suit:

  • enlever la collection existante de mes entrées
  • firering le nouveau LoadData

Y at-il des extraits de ma question? Qu'en est-il des problèmes de mémoire en raison de ma précédente collection existante?

+0

Cela dépend de beaucoup de choses. Votre liste est-elle ObservableCollection? La propriété de liste notifie-t-elle la propriété modifiée? Etes-vous en train de vider la liste et de la recharger ou de la remplacer par une nouvelle liste dans LoadData? –

+0

S'il s'agit d'une liste passive (c'est-à-dire impossible à modifier/mettre à jour), vous pouvez interroger le serveur en arrière-plan et faire clignoter un message lorsque les mises à jour sont prêtes. –

Répondre

1

Quelque chose comme ceci fonctionnerait si vous pensez que votre rappel sera assez léger. Si vous pensez qu'il peut être lourd avec beaucoup d'éléments à revenir alors cela peut ne pas être le moyen le plus efficace, mais fonctionne encore:

public class YourViewModel 
{ 
    public ObservableCollection<YourDataType> YourCollection { get; set; } 

    public ICommand ReloadDataCommand { get; set; } 

    public YourViewModel() 
    { 
     YourCollection = new ObservableCollection<YourDataType>(); 
     ReloadDataCommand = new DelegateCommand(ReloadData); 
    } 

    private void ReloadData() 
    { 
     //Get your new data; 
     YourCollection = new ObservableCollection(someService.GetData()); 
     RaisePropertyChange("YourCollection"); 
     //Depending on how many items your bringing in will depend on whether its a good idea to recreate the whole collection like this. If its too big then you may be better off removing/adding these items as needed. 
    } 
} 

En XAML:

 <Button Content="Reload" Command="{Binding ReloadDataCommand}" /> 
    <List ItemsSource="{Binding YourCollection}"> 
     <!-- All your other list stuff --> 
    </List> 

Hope this helps

Questions connexes