Laden...

Wie kann ich via DataBinding mit dem FileSystemWatcher prüfen, ob dieser ein- oder ausgeschaltet ist

Erstellt von CrocodileDundee vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.397 Views
C
CrocodileDundee Themenstarter:in
51 Beiträge seit 2018
vor 3 Jahren
Wie kann ich via DataBinding mit dem FileSystemWatcher prüfen, ob dieser ein- oder ausgeschaltet ist

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

3.170 Beiträge seit 2006
vor 3 Jahren

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

C
CrocodileDundee Themenstarter:in
51 Beiträge seit 2018
vor 3 Jahren

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

Hinweis von Abt vor 3 Jahren

Keine Full Quotes
[Hinweis] Wie poste ich richtig?

16.807 Beiträge seit 2008
vor 3 Jahren

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.

C
CrocodileDundee Themenstarter:in
51 Beiträge seit 2018
vor 3 Jahren

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

16.807 Beiträge seit 2008
vor 3 Jahren

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).

5.657 Beiträge seit 2006
vor 3 Jahren

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

3.170 Beiträge seit 2006
vor 3 Jahren

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

5.657 Beiträge seit 2006
vor 3 Jahren

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

3.170 Beiträge seit 2006
vor 3 Jahren

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