Đầu tiên mã những gì tôi đã bắt đầu từ:động liên kết với một "con đường" của tài nguyên
<ribbon:RibbonMenuButton IsEnabled="{Binding ForegroundIsConfigurable}"
SmallImageSource="{Binding Source={StaticResource imageSource},
Path=Source,
UpdateSourceTrigger=OnPropertyChanged}">
Trong khi điều này ràng buộc được biên dịch và chạy tốt lý do tôi không hài lòng là imageSource
thay đổi trong thời gian chạy.
StaticResource Markup Extension : Provides a value for any XAML property attribute by looking up a reference to an already defined resource. Lookup behavior for that resource is analogous to load-time lookup, which will look for resources that were previously loaded from the markup of the current XAML page as well as other application sources, and will generate that resource value as the property value in the run-time objects.
Kể từ imageSource
giá trị thay đổi trong thời gian chạy tôi đã phải thay đổi StaticResource
để DynamicResource
. Nhưng tài sản Source
không phải là một tài sản phụ thuộc và do đó đoạn mã sau sẽ nâng cao một lỗi runtime:
SmallImageSource="{Binding Source={DynamicResource imageSource},
Path=Source,
UpdateSourceTrigger=LostFocus}
Vì lý do đó tôi cần phải ràng buộc tài nguyên động trực tiếp đến SmallImageSource
, mà là một tài sản phụ thuộc:
SmallImageSource="{DynamicResource imageSource}"
Điều này một lần nữa sẽ gây ra lỗi thời gian chạy vì imageSource
là loại Image
. SmallImageSource
hy vọng giá trị là loại ImageSource
.
Giờ đây, người ta có thể đề xuất đặt ngữ cảnh dữ liệu thành tài nguyên động của tôi và ràng buộc thuộc tính một cách thích hợp. Nếu tôi làm như vậy, tôi sẽ hủy bỏ ràng buộc của tài sản IsEnabled
trong đó có một DataContext
khác.
Và theo như tôi biết, MultiBinding
cũng không phải là giải pháp vì điều này cung cấp cơ chế liên kết thuộc tính với nhiều nguồn nhưng không cung cấp các thuộc tính khác nhau ràng buộc với các ngữ cảnh và nguồn khác nhau.
Trong khi suy nghĩ về cách tiếp tục, tôi nghĩ rằng may mắn là tôi có thể di chuyển thanh công cụ ImageSource
thành IValueConverter
. Trong bối cảnh dữ liệu đã cho của tôi RibbonMenuButton
Tôi có một giá trị chuỗi với giá trị thích hợp mà thực sự cũng là nguồn của ImageSource
của tôi.
Dù sao, tôi vẫn tự hỏi làm thế nào tôi sẽ giải quyết vấn đề nếu tôi không có cách tiếp cận khác, tức là nếu cả hai nguồn đều ở trong các bối cảnh dữ liệu khác nhau. Có điều gì tôi không thấy? Làm thế nào tôi có thể đảm bảo không giết ràng buộc khác bằng cách ghi đè lên DataContext
và mặc dù ràng buộc chống lại một tài sản của một tài nguyên động?
Các imageSource
là khá giống như ví dụ XAML trên DrawingImage msdn page.
<Image x:Key="imageSource">
<Image.Source>
<DrawingImage>
...
Bạn có thể đăng mã nơi bạn xác định tài nguyên "imageSource" không? –