Seltsames Binding Verhalten
-
2011年11月10日 14:39Hallo Zusammen,
wie kommt es, dass bei Datenänderung im ViewModel (PropertyChanged) ein ValueConverter reagiert, nicht aber die ChangedCallback Methode die im Dependency Property definiert ist?
Das gebundene Control ist Wrapper für ein Grid. Es wird (über einen ValueConverter) an eine ObservableCollection gebunden.
Änderungen die im Grid (inline editing) gemacht werden, werden richtig an die Collection zurückgegeben. Beim Aufruf der View werden die Daten aus der Collection auch initial richtg im Grid dargestellt.
Wenn ich aber über ein anderes Control die Collection im ViewModel ändere, tritt das oben beschriebene Problem auf. Der ValueConverter regiert auf die Änderung, aber eben das Control selber erkennt keine Änderung. IMO unlogisch...
Ich stehe da grad etwas auf dem Schlauch, bzw. kapiere es einfach nicht...
Ich würde mich über einen kleinen Denkanstoß freuen. Vielen Dank :-)
すべての返信
-
2011年11月11日 14:49
Hi,
versuch's mal mit BindingMode TwoWay.
Gruß
Jürgen -
2011年11月11日 15:08
versuch's mal mit BindingMode TwoWay.
Binding Mode ist TwoWay und TwoWay-Binding ist auch nicht das Problem. Ich möchte die geänderten Daten im Grid darstellen können. Die Daten kommen aber nicht einmal bis zum oben beschriebenen WrapperControl, sondern nur bis zum ValueConverter der beim Binding am WrapperControl angehängt ist.Dennoch vielen Dank für den Versuch :-)
-
2011年11月16日 15:31
Hi,
da sich niemand sonst beteiligen mag/kann, frag ich einfach noch mal nach Beispiel-Code, an dem das Problem nachvollzogen werden kann.
Gruß
Jürgen -
2011年11月17日 8:02
Tut mir leid so eine dumme Frage zu stellen, aber wird den wirklich was geändert?
Das Problem ist das denke ich, dass du zwar den Inhalt der ObservableCollection änderst, nicht aber die Collection an sich.
Das Binding und damit auch der ValueConverter reagiert auf das PropertyChanged, was von der Collection ausgelößt wird. Die ChangedCallback wird aber glaube ich nur ausgelöt, wenn du die Variable neu setzt.
Die DependencyProperty bekommt es also gar nicht mit, wenn in der Collection was geändert wird.
Ich denke das ist der Grund.
Grüße,
Alex
- 編集済み Ahn1 2011年11月17日 8:05
-
2011年11月17日 8:18
Hi,
@Alex: Ich vermute - weil eine ObservableCollection verwendet wurde und nicht 'nur' ein "List" - dass es um Änderungen an der Elementmenge geht. Daher wird wohl der Converter auch nicht auf die Collection (bzw. im Binding ItemsSource o. ä.), sondern auf jedes einzelne Item angewendet.
Ansonsten ist Dein Einwand korrekt: der Changed-CallBack wird nur bei einer tatsächlichen Änderung der Daten aufgerufen, der Converter bei jeder Zuweisung. this.MyProperty = this.MyProperty würde zu dem oben beschrieben Verhalten führen.
Gruß
Jürgen

