Deseo escribir un ViewModel que siempre conozca el estado actual de algunas propiedades de dependencia de solo lectura de la Vista.Impulsar propiedades de GUI de solo lectura en ViewModel
Específicamente, mi GUI contiene un FlowDocumentPageViewer, que muestra una página a la vez desde un FlowDocument. FlowDocumentPageViewer expone dos propiedades de dependencia de solo lectura llamadas CanGoToPreviousPage y CanGoToNextPage. Quiero que mi ViewModel siempre sepa los valores de estas dos propiedades de Vista.
pensé que podía hacer esto con un enlace de datos OneWayToSource:
<FlowDocumentPageViewer
CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...>
Si esto era permitido, sería perfecto: cada vez que la propiedad CanGoToNextPage del FlowDocumentPageViewer modificado, el nuevo valor sería empujada hacia abajo en NextPageAvailable del modelo de vista propiedad, que es exactamente lo que quiero.
Lamentablemente, esto no compila: Recibo un error que dice La propiedad 'CanGoToPreviousPage' es de solo lectura y no se puede configurar desde el marcado. Al parecer, las propiedades de solo lectura no admiten ningún tipo de enlace de datos, ni siquiera el enlace de datos de solo lectura con respecto a esa propiedad.
Podría hacer que las propiedades de mi ViewModel sean DependencyProperties, y hacer un enlace OneWay yendo para otro lado, pero no estoy loco por la violación de separación de preocupaciones (ViewModel necesitaría una referencia a View, que datavinding de MVVM se supone que debe evitar).
FlowDocumentPageViewer no expone un evento CanGoToNextPageChanged, y no conozco ninguna buena forma de obtener notificaciones de cambio de DependencyProperty, salvo crear otro DependencyProperty para vincularlo, lo que parece exagerado aquí.
¿Cómo puedo mantener mi ViewModel informado de los cambios en las propiedades de solo lectura de la vista?
me pregunto si pudieras hacer algún truco para adjuntar automáticamente las propiedades, sin necesidad de observar. Pero esto parece una buena solución. ¡Gracias! –
Gracias Kent. Publiqué un ejemplo de código a continuación para esta clase "SizeObserver". –
+1 a este sentimiento: "los DP de solo lectura deben ser compatibles con los enlaces OneWayToSource" – Tristan