2009-09-10 8 views
2

J'ai besoin d'actualiser mon ListView chaque fois que l'événement IsChanged d'un autre contrôle est déclenché. Je googlé sur la façon de le faire, et j'ai vu un lien stackoverflow qui m'a conduit hereUn ListView plus élégant requery

L'une des réponses travaillé:

listView.ItemsSource = listView.ItemsSource  

Est-ce vraiment la seule façon de me rafraîchir ListView? Il se sent un peu éteint.

+1

Aïe, qui est vraiment hors tension. Cette déclaration devrait être un noop. Et si ce n'est pas le cas, quelqu'un le pensera probablement et le supprimera quand même. Dangereux. –

Répondre

5

Il suffit de l'invalider.

listView.InvalidateProperty(ListView.ItemsSourceProperty) 

Cela devrait le faire. En aparté, je suggère vraiment de regarder MVVM. Il tend à être beaucoup plus puissant. Dans ce cas, pour une application MVVM, je voudrais juste faire ceci:

Xaml:

<ListView ItemsSource="{Binding MyItems}" /> 

Et ici serait mon ViewModel je liant à:

public ObservableCollection<MyItem> MyItems 
{ 
    get; set; 
} 

public void IsChangedHandler(...) 
{ 
    ... 
    this.OnPropertyChanged("MyItems"); 
} 
1

Quelle est votre besoin d'actualiser la liste à chaque fois. Il va certainement ralentir la performance de votre application.

Il est préférable d'utiliser ObervableCollection en tant que ItemSource de votre listview.

Vous pouvez trouver une collection observable sans danger pour les fils here.

Voir aussi cette question dans Forum MSDN - ListView.ItemsSource: howto update the UI whenever the source is updated?

Questions connexes