Ich möchte ein ViewModel schreiben, das immer den aktuellen Status einiger schreibgeschützter Abhängigkeitseigenschaften aus der Ansicht kennt.
Insbesondere enthält meine GUI einen FlowDocumentPageViewer, der jeweils eine Seite aus einem FlowDocument anzeigt. FlowDocumentPageViewer stellt zwei schreibgeschützte Abhängigkeitseigenschaften mit den Namen CanGoToPreviousPage und CanGoToNextPage bereit. Ich möchte, dass mein ViewModel immer die Werte dieser beiden View-Eigenschaften kennt.
Ich dachte, ich könnte dies mit einer OneWayToSource-Datenbindung tun:
<FlowDocumentPageViewer
CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...>
Wenn dies zulässig wäre, wäre es perfekt: Wenn sich die CanGoToNextPage-Eigenschaft von FlowDocumentPageViewer ändert, wird der neue Wert in die NextPageAvailable-Eigenschaft von ViewModel verschoben, genau das, was ich möchte.
Leider wird dies nicht kompiliert: Ich erhalte die Fehlermeldung, dass die Eigenschaft 'CanGoToPreviousPage' schreibgeschützt ist und nicht über das Markup festgelegt werden kann. Offenbar schreibgeschützte Eigenschaften nicht unterstützen jede Art von Datenbindung, nicht einmal , dass die Datenbindung schreibgeschützt in Bezug auf diese Eigenschaft.
Ich könnte festlegen, dass die Eigenschaften meines ViewModels DependencyProperties sind, und eine OneWay-Bindung in die andere Richtung erstellen, aber ich bin nicht verrückt nach der Verletzung der Trennung von Bedenken (ViewModel würde einen Verweis auf die Ansicht benötigen, den die MVVM-Datenbindung vermeiden soll ).
FlowDocumentPageViewer macht kein CanGoToNextPageChanged-Ereignis verfügbar, und ich kenne keine gute Möglichkeit, Änderungsbenachrichtigungen von einer DependencyProperty abzurufen, ohne eine andere DependencyProperty zu erstellen, an die sie gebunden werden kann, was hier wie ein Overkill erscheint.
Wie kann ich mein ViewModel über Änderungen an den schreibgeschützten Eigenschaften der Ansicht auf dem Laufenden halten?