Я хочу написать ViewModel, который всегда знает текущее состояние некоторых свойств зависимостей только для чтения из View.
В частности, мой графический интерфейс содержит FlowDocumentPageViewer, который отображает по одной странице из FlowDocument. FlowDocumentPageViewer предоставляет два свойства зависимостей, доступных только для чтения, которые называются CanGoToPreviousPage и CanGoToNextPage. Я хочу, чтобы моя ViewModel всегда знала значения этих двух свойств View.
Я подумал, что могу сделать это с привязкой данных OneWayToSource:
<FlowDocumentPageViewer
CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...>
Если бы это было разрешено, это было бы идеально: всякий раз, когда свойство CanGoToNextPage в FlowDocumentPageViewer изменялось, новое значение передавалось в свойство NextPageAvailable ViewModel, а это именно то, что я хочу.
К сожалению, это не компилируется: я получаю сообщение об ошибке, что свойство CanGoToPreviousPage доступно только для чтения и не может быть установлено из разметки. Очевидно, свойства, доступные только для чтения, не поддерживают никакую привязку данных, даже привязку данных, доступную только для чтения в отношении этого свойства.
Я мог бы сделать свои свойства ViewModel DependencyProperties и сделать привязку OneWay в другую сторону, но я не в восторге от нарушения разделения проблем (ViewModel потребуется ссылка на View, которого привязка данных MVVM должна избегать ).
FlowDocumentPageViewer не предоставляет событие CanGoToNextPageChanged, и я не знаю ни одного хорошего способа получать уведомления об изменениях из DependencyProperty, кроме создания другого DependencyProperty для его привязки, что здесь кажется излишним.
Как я могу информировать мою модель представления об изменениях свойств представления, доступных только для чтения?