Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Wie kann ich via DataBinding mit dem FileSystemWatcher prüfen, ob dieser ein- oder ausgeschaltet ist
CrocodileDundee
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

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

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MarsStein am .
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
CrocodileDundee
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

beantworten | zitieren | melden

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

Moderationshinweis von Abt (08.05.2020 - 12:52:23):

Keine Full Quotes
[Hinweis] Wie poste ich richtig?

private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
CrocodileDundee
myCSharp.de - Member



Dabei seit:
Beiträge: 54

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

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:
Zitat
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).
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
Zitat von MrSparkle
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
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MarsStein am .
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers