Tôi muốn viết một ViewModel luôn biết trạng thái hiện tại của một số thuộc tính phụ thuộc chỉ đọc từ Chế độ xem.Đẩy các thuộc tính GUI chỉ đọc trở lại vào ViewModel
Cụ thể, GUI của tôi chứa FlowDocumentPageViewer, hiển thị một trang tại một thời điểm từ FlowDocument. FlowDocumentPageViewer cho thấy hai thuộc tính phụ thuộc chỉ đọc có tên là CanGoToPreviousPage và CanGoToNextPage. Tôi muốn ViewModel của mình luôn biết giá trị của hai thuộc tính Chế độ xem này.
I figured tôi có thể làm điều này với một liên kết dữ liệu OneWayToSource:
<FlowDocumentPageViewer
CanGoToNextPage="{Binding NextPageAvailable, Mode=OneWayToSource}" ...>
Nếu điều này được cho phép, nó sẽ được hoàn hảo: bất cứ khi nào tài sản CanGoToNextPage của FlowDocumentPageViewer thay đổi, giá trị mới sẽ được đẩy xuống NextPageAvailable của ViewModel tài sản, đó là chính xác những gì tôi muốn.
Thật không may, điều này không biên dịch: Tôi nhận được lỗi nói rằng thuộc tính 'CanGoToPreviousPage' là chỉ đọc và không thể được đặt từ đánh dấu. Rõ ràng các thuộc tính chỉ đọc không hỗ trợ bất kỳ loại dữ liệu nào, thậm chí không phải databinding đó là chỉ đọc đối với thuộc tính đó.
Tôi có thể biến thuộc tính của ViewModel thành DependencyProperties và tạo liên kết OneWay theo cách khác, nhưng tôi không điên về vi phạm ly thân (ViewModel sẽ cần tham chiếu đến Chế độ xem, dữ liệu MVVM có nghĩa vụ phải tránh).
FlowDocumentPageViewer không hiển thị sự kiện CanGoToNextPageChanged và tôi không biết cách nào để nhận thông báo thay đổi từ DependencyProperty, ngắn tạo DependencyProperty khác để liên kết nó, có vẻ như quá mức ở đây.
Làm cách nào để giữ cho ViewModel của mình được thông báo về các thay đổi đối với thuộc tính chỉ đọc của chế độ xem?
Tôi tự hỏi nếu bạn có thể thực hiện một số thủ thuật để tự động đính kèm các thuộc tính mà không cần Quan sát. Nhưng điều này trông giống như một giải pháp tốt. Cảm ơn! –
Cảm ơn Kent. Tôi đã đăng một mẫu mã bên dưới cho lớp "SizeObserver" này. –
+1 cho tình cảm này: "DP chỉ đọc sẽ hỗ trợ các ràng buộc OneWayToSource" – Tristan