我想寫一個ViewModel,它始終知道視圖中某些只讀依賴項屬性的當前狀態。將只讀GUI屬性返回到ViewModel
具體來說,我的GUI包含一個FlowDocumentPageViewer,它每次從FlowDocument顯示一個頁面。 FlowDocumentPageViewer公開了兩個名爲CanGoToPreviousPage和CanGoToNextPage的只讀依賴項屬性。我希望我的ViewModel始終知道這兩個視圖屬性的值。
我想我可以用OneWayToSource數據綁定做到這一點:
<FlowDocumentPageViewer
CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...>
如果這是允許的,這將是完美的:每當FlowDocumentPageViewer的CanGoToNextPage性質改變,新的價值會得到向下推到視圖模型的NextPageAvailable財產,這正是我想要的。
不幸的是,這不能編譯:我得到一個錯誤,說'CanGoToPreviousPage'屬性是隻讀的,不能從標記中設置。顯然,只讀屬性不支持任何類型的數據綁定,甚至不支持對該屬性只讀的數據綁定。
我可以讓我的ViewModel的屬性成爲DependencyProperties,並使OneWay綁定成爲另一種方式,但我並沒有爲關注分離違規而瘋狂(ViewModel需要對View的引用,其中MVVM數據綁定應該避免)。
FlowDocumentPageViewer不公開CanGoToNextPageChanged事件,並且我不知道從DependencyProperty獲取更改通知的任何好方法,但是沒有創建另一個將其綁定到的DependencyProperty,這看起來像是過度殺傷。
如何讓ViewModel瞭解視圖只讀屬性的更改?
我不知道如果你可以做一些技巧來自動附加屬性,而不需要觀察。但這看起來很不錯。謝謝! – 2009-07-05 12:58:08
謝謝肯特。我爲這個「SizeObserver」類發佈了一個代碼示例。 – 2009-08-20 12:54:19
+1到這種情緒:「只讀移民應該支持OneWayToSource綁定」 – Tristan 2011-05-21 19:04:54