WPF / C# mise à Jour de changement de propriété d'un élément dans une ObservableCollection à la zone de liste

J'ai une zone de liste:

<ListBox x:Name="lbxAF" temsSource="{Binding}">

qui obtient ses données de cette de cette nouvelle Collection Observable:

public ObservableCollectionEx<FileItem> folder = new ObservableCollectionEx<FileItem>();

qui est créé à l'intérieur d'une classe qui utilise FileSystemWatcher pour surveiller un dossier spécifique pour l'ajout, la suppression et la modification de fichiers.

L'ObservableCollection a été modifié (d'où son Ex à la fin) pour que je puisse le modifier à partir d'un filetage extérieur (le code n'est pas le mien, j'ai fait des recherche par le biais de ce site web et l'ont trouvé, il fonctionne comme un charme):

    //This is an ObservableCollection extension
    public class ObservableCollectionEx<T> : ObservableCollection<T>
    {
        //Override the vent so this class can access it
        public override event System.Collections.Specialized.NotifyCollectionChangedEventHandler CollectionChanged;

        protected override void OnCollectionChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            using (BlockReentrancy())
            {
                System.Collections.Specialized.NotifyCollectionChangedEventHandler eventHanlder = CollectionChanged;
                if (eventHanlder == null)
                    return;

                Delegate[] delegates = eventHanlder.GetInvocationList();

                //Go through the invocation list
                foreach (System.Collections.Specialized.NotifyCollectionChangedEventHandler handler in delegates)
                {
                    DispatcherObject dispatcherObject = handler.Target as DispatcherObject;

                    //If the subscriber is a DispatcherObject and different thread do this:
                    if (dispatcherObject != null && dispatcherObject.CheckAccess() == false)
                    {
                        //Invoke handler in the target dispatcher's thread
                        dispatcherObject.Dispatcher.Invoke(DispatcherPriority.DataBind, handler, this, e);
                    }
                    //Else, execute handler as is
                    else
                    {
                        handler(this, e);
                    }
                }
            }
        }
    }

La collection est constituée de ces:

public class FileItem
{
    public string Name { get; set; }
    public string Path { get; set; }
}

qui me permettent de stocker des noms et des chemins de fichiers.

Tout fonctionne très bien aussi loin que la suppression et l'ajout de fichiers, et la Zone de Liste est mise à jour sans faille à l'égard de ces deux... cependant, si je change le nom de tous les fichiers, il n'a pas de mise à jour de la zone de liste.

Comment aurais-je informer zone de liste des changements dans FileItem propriétés? Je suppose que ObservableCollection réagirais, mais apparemment, il hisse le drapeau uniquement lorsque FileItem est ajouté ou supprimé, pas quand son contenu est modifié.

  • Votre FileItem n'est pas la mise en œuvre de INotifiyPropertyChanged...aussi comment êtes-vous mise à jour de nom de fichier dans le viewmodel/code-behind?
InformationsquelleAutor B.K. | 2013-09-11