In my window, I need to set a list of FileWatcher, for a list on machines.
For this I set a new class MachineWatcher :
public class MachineWatcher : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void NotifyPropertyChanged(string propName)
        {
            this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
        }
        private bool NotifyPropertyChanged<T>(ref T variable, T valeur, [CallerMemberName] string nomPropriete = null)
        {
            if (object.Equals(variable, valeur)) return false;
            variable = valeur;
            NotifyPropertyChanged(nomPropriete);
            return true;
        }
        private Machine machine { get; set; }
        public Machine Machine { get { return this.machine; } set { this.machine = value; } }
        private string typeWatcher { get; set; } = "";
        public string TypeWatcher { get { return this.typeWatcher; } set { this.typeWatcher = value; } }
        FileSystemWatcher watcher { get; set; }
        public FileSystemWatcher Watcher { get { return this.watcher; } set { this.watcher = value; } }
        private string lastFileName { get; set; } = "";
        private DateTime lastEvent { get; set; } = DateTime.MinValue;
        private ObservableCollection<string> listErrors { get; set; } = new ObservableCollection<string>();
        public ObservableCollection<string> ListErrors { get { return this.listErrors; } set { this.listErrors = value; NotifyPropertyChanged("ListErrors"); } }
        public MachineWatcher()
        {
        }
        public MachineWatcher(string type,string directoryStock,string fileFilter)
        {
            this.typeWatcher = type;
            this.watcher = new FileSystemWatcher
            {
                Path = Path.GetDirectoryName(directoryStock),
                Filter = fileFilter
            };
            if (this.typeWatcher=="stock")
            {
                this.watcher.Created += new FileSystemEventHandler(OnStockFileCreated);
            }
            else if(this.typeWatcher=="machine")
            {
                //this.watcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.LastAccess | NotifyFilters.CreationTime;
                this.watcher.Changed += OnFeedBackNesterCreated;
                this.watcher.Created += OnFeedBackNesterCreated;
                this.watcher.Renamed += OnFeedBackNesterCreated;
                this.watcher.Deleted += OnFeedBackNesterCreated;
            }
            this.watcher.EnableRaisingEvents = true;
        }
        private void OnFeedBackNesterCreated(object source, FileSystemEventArgs e)
        {
            try
            {
                //try to read file
            }
            catch
            {
                string errorText = "Error reading file " + e.FullPath;
                this.ListErrors.Add(errorText);
            }
        }
        
    }
Then in my mainWindow I defined a List<MachineWatcher>
I create then like that :
MachineWatcher machineWatcher = new MachineWatcher("stock", directoryStock, "*.csv");
this.listMachineWatchers.Add(machineWatcher);
What I would like, is when my MachineWatcher meets an error, and go in catch, update a Observable<string> ListErrors, where are written all the errors for all machines.
Is there a way to call a function in MainWindows from the object MachineWatcher?
 
    