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