Я хочу написати ViewModel, який завжди знає поточний стан деяких властивостей залежності лише для читання з View.
Зокрема, мій графічний інтерфейс містить FlowDocumentPageViewer, який відображає по одній сторінці одночасно з FlowDocument. FlowDocumentPageViewer відкриває два властивості залежності лише для читання під назвою CanGoToPreviousPage та CanGoToNextPage. Я хочу, щоб мій ViewModel завжди знав значення цих двох властивостей View.
Я зрозумів, що я можу це зробити за допомогою прив'язки даних OneWayToSource:
<FlowDocumentPageViewer
CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...>
Якби це було дозволено, було б ідеально: щоразу, коли зміна властивості FlowGoToNextPage FlowDocumentPageViewer змінюватиметься, нове значення буде витіснене у власність NextPageAvailable ViewModel, саме цього я і хочу.
На жаль, це не компілюється: я отримую помилку, кажучи , що властивість "CanGoToPreviousPage" є лише для читання, і її неможливо встановити з розмітки. Мабуть, властивості лише для читання не підтримують будь-якого типу прив'язки даних, навіть навіть прив'язки даних, які є лише для читання стосовно цього властивості.
Я міг би зробити свої властивості ViewModel "DependencyProperties" і зробити прив'язку OneWay в інший бік, але я не збожеволів про порушення роз'єднання проблем (ViewModel потребує посилання на View, якого, як слід уникати прив'язки даних MVVM) ).
FlowDocumentPageViewer не виставляє події CanGoToNextPageChanged, і я не знаю жодного доброго способу отримання сповіщень про зміни від DependencyProperty, окрім створення іншого DependencyProperty для його прив’язки, що, здається, тут перевищує кількість.
Як я можу інформувати ViewModel про зміни властивостей перегляду лише для читання?