2011-07-22 5 views
1

J'ai un ListView avec 3 colonnes (nom d'utilisateur, actif et groupe) Le ItemsSource est lié à un StaticResourceActualiser les données dans ListView

ItemsSource="{Binding Source={StaticResource SortedUsers}, UpdateSourceTrigger=PropertyChanged}" 

la ressource statique est définie comme:

<CollectionViewSource x:Key="SortedUsers" Source="{Binding UsersList, UpdateSourceTrigger=PropertyChanged}"> 
      <CollectionViewSource.SortDescriptions> 
       <scm:SortDescription 
       Direction="Ascending" 
       PropertyName="UserName" /> 
      </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

L'utilisateur peut sélectionner un élément dans la liste et cliquer sur "Modifier" pour modifier les informations sur l'utilisateur ou cliquer sur un bouton "Ajouter" pour ajouter un nouvel utilisateur à la liste. Les deux options Ajouter et Modifier utilisent la même boîte de dialogue modale pour permettre l'installation/la modification d'un nouvel utilisateur. L'ajout d'un utilisateur fonctionne correctement, le nouvel utilisateur apparaît dans la liste dès que la boîte de dialogue modale se ferme. toutefois, la modification d'un utilisateur existant ne met pas à jour les données dans ListView jusqu'à ce que la fenêtre contenant la liste soit fermée puis rouverte. Que dois-je faire pour avoir la mise à jour ListView pour modifier?

Répondre

1

did u essayez d'utiliser

((CollectionViewSource)this.FindResource("SortedUsers")).View.Refresh(); 

Bien que dans MVVM les étapes ci-dessus ne seront pas en permis. Ainsi, si la collection source (UsersList) est ObservableCollection, la source de la vue de la collection sera automatiquement actualisée lors de la collecte des notifications modifiées de UsersList. Faites-moi savoir si cela aide.

1

Vos objets de données implémentent-ils l'interface INotifyPropertyChanged?

Voir: https://stackoverflow.com/questions/6713288/databinding-fail-after-using-controltemplate/6713334#6713334

INotifyPropertyChanged informe l'interface utilisateur que quelque chose a changé sur la classe mise en œuvre. À noter: je ne connais pas le type de collection que vous utilisez pour organiser vos cours (qui est passé dans CollectionViewSource), mais j'utilise presque toujours ObservableCollections. Ils implémentent CollectionChanged et notifient l'interface utilisateur lorsque des éléments sont ajoutés, supprimés et que la collection est actualisée.

+0

merci pour votre temps. Oui, l'objet implémente INotifyPropertyChanged et la liste IS est ObservableCollection. La liste augmentera si des éléments y sont ajoutés mais, pour une raison quelconque, les champs individuels de la grille ne sont pas mis à jour si les données changent. Peut-être que l'objet sous-jacent qui contient les données de champ n'implémente pas INotifyPropertyChanged. – ihatemash

Questions connexes