Comment effacer WPF listbox?
Hai suis en utilisant wpf zone de liste, je ne peux pas en mesure d'effacer la liste lors de mon appel recharger les données de fonction, j'ai juste envie de le recharger à nouveau les données au moment de l'exécution,tandis que le chargement de la page, il charge les données correctement, lorsque j'actualise la nouvelle de l'extraction des données dans itemsource je peux voir qu'en mode debug, mais pas de nouvelles données dans la zone de liste, les anciennes données reste dans la liste, je ne peux même pas clair, quand j'ai de la liste d'appels.éléments.clear(), elle lève une exception et l'application se bloque, j'ai essayé beaucoup de façons, est-ther aucun problème dans mon code XAML de liaison, voici mon code.
<DataTemplate x:Key="listBoxTemplate">
<StackPanel Margin="3">
<DockPanel >
<TextBlock FontWeight="Bold" Text="{Binding Name}" DockPanel.Dock="Left" Margin="5,0,10,0"/>
<TextBlock Text=" " />
<TextBlock Text="{Binding Percnt}" Foreground="Green" FontWeight="Bold" />
</DockPanel>
</StackPanel>
</DataTemplate>
Ma listbox
<ListBox Height="898" Name="lstEntity" Width="291" ItemTemplate="{StaticResource listBoxTemplate}" SelectionChanged="lstEntity_SelectionChanged"/>
Code de liaison
lstEntity.ItemsSource = sei.getNames();
getnames a() la fonction retourne les données sous forme de liste,rien de spécial code, Comment faire pour résoudre ce problème.
OriginalL'auteur Spen D | 2010-07-15
Vous devez vous connecter pour publier un commentaire.
La meilleure façon d'obtenir ce type de comportement est d'utiliser une DependencyProperty et des liaisons.
Dans votre fichier de classe créer les DP comme suit:
Dans vous XAML se lier à ce DP comme suit:
Où "MyWindow" est le x:Nom de la fenêtre racine dans vous fichier XAML (vous pouvez bien sûr utiliser datacontext comme le modèle MVVM 🙂
Alors si vous voulez ajouter/supprimer des éléments à partir de votre code vous venez d'accéder à la liste directement:
Vous aussi, bien sûr, besoin de changer le type Générique de la collection à être votre propre classe...
OriginalL'auteur Mark
Avez-vous jamais remplir la zone de liste en ajoutant directement à la collection d'Éléments ou tout simplement à travers ItemsSource?
Le cas échéant, définir la ItemsSource à null et le ramener à recharger.
ne suis pas à l'ajouter directement, tout en ajoutant par itemsource seulement
Je suis à court d'idées alors désolé.
Ce qu'il essaie de dire est de mettre à jour la propriété qui vous lie à l'origine. Mise à jour de l'objet en mémoire et qui devrait mettre à jour l'INTERFACE utilisateur. Ainsi, en utilisant une ObservableCollection comme le ItemSource, de l'affectation de la collection de la propriété à une nouvelle valeur doit désactiver le composant de l'INTERFACE utilisateur, l'appel de ajout/suppression de devrait le mettre à jour, etc. Vous ne voulez pas pour accéder à la liste des éléments directement pour des modifications à la collection; cela permettra de lever une exception. L'autre option est la mise en œuvre de INotifyPropertyChanged vous-même.
OriginalL'auteur Jeff Mercado
Ne peut pas dire quelle est la cause du problème dans votre cas, jusqu'à ce que vous donner l'exception et d'autres détails. Cependant, ce qui suggère la meilleure façon de faire la chose.
getnames
méthode de retour d'un IEnumerable.Maintenant, vous pouvez modifier votre ObservableCollection de voir les changements dans la zone de liste.
OriginalL'auteur Amsakanna
Avant de faire cela :
Claire de la zone de liste itemssource :
OriginalL'auteur Malcolm
Si vous utilisez le pattern MVVM, ajouter une propriété à votre ViewModel:
Puis, dans votre XAML, code ItemsSource comme ceci:
Chaque fois que le contenu de votre liste de Noms de changements, de déclencher l'événement PropertyChanged; cela indiquera à la WPF système de rafraîchissement de votre zone de liste:
Ensuite, mettre en œuvre que la propriété et l'interface INotifyPropertyChanged directement sur votre classe, si vous le pouvez.
OriginalL'auteur Rob Perkins