propagieren Eigenschaftenänderungen durch mehrere Klassen

8

Ich versuche herauszufinden, wie Eigenschaften durch mehrere Klassen richtig übergeben werden. Ich weiß, dass ich einfach INotifyPropertyChanged in jeder Klasse implementieren und auf Änderungen in der Eigenschaft warten kann, aber das scheint ziemlich viel unnötigen Code zu sein.

Die Situation:
Ich habe eine Klasse (nennen wir es Class1 ) mit zwei Abhängigkeitseigenschaften: FilterStatement (String) und Filter (Filterklasse). Das Setzen der Anweisung beeinflusst den Filter und umgekehrt.
Die Konvertierungslogik zwischen Anweisung und Filter befindet sich jedoch nicht in Class1 , sondern in Class3 - was Class1 nicht direkt weiß. Dazwischen liegt Class2 , das die Änderungen nur passieren muss. (Sie können sich vorstellen, dass Klasse 1 bis 3 Viewmodel, Model und Repository ist, obwohl dies in der realen Situation nicht vollständig übereinstimmt).

%Vor%

Meine naive Lösung wäre, die Eigenschaften über alle drei Klassen hinweg zu duplizieren, INotifyPropertyChanged in Class2 und Class3 zu implementieren und die Änderungen anzuhören, alles bis Class3 und in Result bis% co_de weiterzugeben %. Gibt es dafür keine bessere Lösung?

    
Florian Koch 31.08.2016, 09:39
quelle

2 Antworten

3

Tatsächlich, während Class1 kein Steuerelement ist (da es ein ViewModel ist), sehe ich keinen Grund, seine Eigenschaften als DependencyProperty zu definieren, weil die Implementierung von INotifyPropertyChanged ausreichen sollte. Die Implementierung mit DependencyProperty sollte jedoch ebenfalls funktionieren:

%Vor%

Bitte beachten Sie, dass Filter.Equals korrekt implementiert werden sollte und die Konvertierungsmethoden von Class3 die gleichen Werte für gleiche Argumente zurückgeben sollten.

    
Eugene Berdnikov 06.09.2016, 05:16
quelle
0

Ich denke, du verkomplizierst das zu sehr. Beobachtbares Muster passt besser zur Implementierung der Benutzerschnittstelle. Warum codierst du nicht in Class3 logic, die alle Eigenschaften in Class1 setzt? I thnik, dass Overload Setter FilterStatment und Filter in Class1 , was ViewModel ist auch eine gute Lösung. Einfachere Lösung als besser.

    
mati 31.08.2016 12:32
quelle

Tags und Links