Imaginez les suivantes:WPF - Recharger une collection (avec 'nouveau') sans contrôle reconsolidation
class Repository
{
private ObservableCollection<ModelClass> _allEntries;
public ObservableCollection<ModelClass> AllEntries
{
get { return _allEntries; }
set { _allEntries = value; }
}
public void RefreshDataFromDB()
{
_all = new ObservableCollection(GetMyData()); // whatever method there is
}
}
Maintenant il y a quelques contrôles qui se lient à cette collection, par exemple:
<ListView ItemsSource="{Binding Repository.AllEntries, ElementName=Whatever}"/>
Le problème est maintenant que si j'appelle le RefreshDataFromDB
les liaisons se perdent (du moins il semble) que le _all pointe maintenant vers la nouvelle partie de la mémoire et les liaisons utilisent toujours l'ancienne référence. INotifyPropertyChanged
ne m'aide pas dans ce cas (par exemple, le mettre RefreshDataFromDB
n'aide pas beaucoup). La question serait - comment géreriez-vous un cas où vous répondez à une collection et souhaitez mettre à jour les liaisons de ses clients?
Je pense e S'il y a une faute de frappe, votre nom de propriété est AllEntries alors que vous êtes lié à TOUS! – akjoshi
Que voulez-vous dire exactement par: "les fixations se perdent (au moins il semble)" Pouvez-vous s'il vous plaît fournir plus de détails. – akjoshi
La question avait une solution simple, mais juste pour clarifier: 1. Oui, c'est une faute de frappe là-bas. Ce devrait être AllEntries. 2. Les liaisons sont perdues et sont initialement liées à la variable _all => une référence mémoire. Lorsque j'utilise le mot clé 'new', la référence _all change et pointe vers une autre adresse en mémoire, mais les contrôles qui se lient à _all regardent toujours l'ancienne mémoire. Fondamentalement, le problème était de savoir comment éviter les contrôles en utilisant l'ancienne adresse. C'est tout. La solution simple de Kieren (.Clear() + .AddRange()) a aidé mon cas. – Jefim