Hallo zusammen,
versuche schon seit längerer Zeit, die Property "EnableRaisingEvents" des
FileSystemWatchers an eine TextBox zu binden, so dass diese mir anzeigt,
ob der FileSystemwatcher ein- oder ausgeschaltet ist.
Mein ursprünglicher Versuch war:
(fsw_WatcherProjectFolder = FileSystemWatcher,
textBox1 = TextBox)
this.textBox1.DataBindings.Add(new Binding("Text", fsw_WatcherProjectFolder, "EnableRaisingEvents", true, DataSourceUpdateMode.OnPropertyChanged));
Die Bindung funktioniert leider nur 1x (beim Starten der App), bei der Änderung von "EnableRaisingEvents" wird aber die TextBox nicht mehr aktualisiert.
Danke und Gruß
Frank
Hallo,
das kann nicht funktionieren, weil der FileSystemWatcher nicht INotifyPropertyChanged implementiert.
Es werden also keine Nachrichten über die Änderung dieser Property generiert, folglich kann die GUI auch keine solchen Benachrichtigungen erhalten.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Könnte ich dann vielleicht per Vererbung einen neues UserControl
(z.B. "MyFileSystemWatcher") erstellen
und die INotifyPropertyChanged dort für die gewünschte Property implementieren?
Gruß Frank
Keine Full Quotes
[Hinweis] Wie poste ich richtig?
Wie Du das UI-technisch umsetzt spielt keine Rolle.
Was Du machen musst: die Events vom FSW zu abonnieren und ein entsprechendes Model damit zu versorgen.
Im Endeffekt also wie bei jeder Klasse, die Änderungen über Events mitteilt.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo zusammen,
habe jetzt versucht über Vererbung das Problem zu lösen, d.h. ich habe eine Klasse "MyFileSystemWatcher" erstellt, die von FileSystemWatcher abgeleitet ist und iNotifyPropertyChanged
beinhaltet.
Nun steh ich aber vor dem Problem, dass ich natürlich auf den Setter der Property, auf die ich die PropertyChange-Änderung anwenden möchte (in meinem Fall "EnableRaisingEvents") nicht zugreifen kann, um dort die OnPropertyChanged-Methode einzufügen.
Gibt es einen Weg das trotzdem zu realisieren?
Danke und Gruß
Frank
Ich glaub Du erwartest von einer Ableitung etwas, wofür sie gar nicht gedacht ist.
Die Ableitung bringt Dir hier nichts.
Daher auch mein Hinweis:
Was Du machen musst: die Events vom FSW zu abonnieren und ein entsprechendes Model damit zu versorgen.
Im Endeffekt also wie bei jeder Klasse, die Änderungen über Events mitteilt.
Du musst also eine Wrapper-Klasse schreiben; das wirste mit ner Ableitung nicht hinbekommen.
Dafür ist die Ableitung auch gar nicht da (oder gedacht).
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich glaube, dir ist nicht ganz klar, wie DataBinding funktioniert, und was ein Event ist.
DataBinding geht nur mit einer Eigenschaft. Ein Event informiert nur darüber, daß sich eine Eigenschaft geändert hat.
Schau dir mal diesen Artikel an, da ist erklärt, wie DataBinding funktioniert: [Artikel] MVVM und DataBinding
Im Grunde brauchst du ein ViewModel, das das Event vom FileSystemWatcher abonniert, und darauf reagiert, indem es eine Eigenschaft ändert, an die du deine Textbox gebunden hast. Ein UserControl oder eine Ableitung vom FileSystemWatcher sind hier nicht zielführend.
Weeks of programming can save you hours of planning
Hallo,
Im Grunde brauchst du ein ViewModel, das das Event vom FileSystemWatcher abonniert, und darauf reagiert, indem es eine Eigenschaft ändert, an die du deine Textbox gebunden hast.
Es geht ja hier um die Property FileSystemWatcher.EnableRaisingEvents
, und wenn sich diese ändert, gibt es eben kein Event, auf das man reagieren könnte.
Deshalb denke ich auch, dass ein Wrapper die richtige Lösung ist. Zumindest sollte man den FileSystemWatcher in irgend einer Weise so kapseln, dass das Property nur über eine eigene Klasse gesetzt werden kann, dann kann man bei Änderung des Wertes auch eine eigene Notification auslösen.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Verstehe ich nicht. Dieses Property ändert sich doch nicht automatisch. Und um es zu setzen, braucht man keinen Wrapper.
Und wenn es um DatanBinding geht und darum, daß der Benutzer den Watcher an- und ausschalten kann, braucht man halt ein ViewModel.
Weeks of programming can save you hours of planning
Hallo MrSparkle,
ich hatte es so interpretiert, dass der Benutzer sehen soll, wenn irgendwo sonst durch irgeneine Aktion im Code der Watcher ein- oder ausgeschaltet wird.
Also quasi eine Überwachung der Property, egel von wo oder wodurch sie geändert wird. Vielleicht habe ich das aber auch missverstanden. Das weiss nur der TE...
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca