पहले कोड मैं से क्या शुरू हो गया था की एक "पथ" के लिए बाध्य:गतिशील संसाधन
<ribbon:RibbonMenuButton IsEnabled="{Binding ForegroundIsConfigurable}"
SmallImageSource="{Binding Source={StaticResource imageSource},
Path=Source,
UpdateSourceTrigger=OnPropertyChanged}">
हालांकि यह बाध्यकारी संकलन है और ठीक कारण मैं संतुष्ट नहीं हूँ चल रहा है कि रनटाइम के दौरान imageSource
परिवर्तन है।
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.
के बाद से imageSource
मान रनटाइम के दौरान बदल रहा है मैं DynamicResource
को StaticResource
बदलना पड़ा। लेकिन संपत्ति Source
निर्भरता संपत्ति नहीं है और इस प्रकार निम्नलिखित कोड एक रनटाइम त्रुटि बढ़ा देंगे:
SmallImageSource="{Binding Source={DynamicResource imageSource},
Path=Source,
UpdateSourceTrigger=LostFocus}
यही कारण है कि मैं SmallImageSource
के लिए सीधे गतिशील संसाधन बाध्य करने के लिए की जरूरत है, जो एक निर्भरता संपत्ति है के लिए:
SmallImageSource="{DynamicResource imageSource}"
यह फिर से रनटाइम त्रुटि उठाएगा क्योंकि imageSource
Image
का प्रकार है। SmallImageSource
मान को ImageSource
का प्रकार होने की उम्मीद है।
कोई अब मेरे गतिशील संसाधन में डेटा संदर्भ सेट करने और उचित रूप से संपत्ति को बांधने का सुझाव दे सकता है। अगर मैं ऐसा करता हूं, तो मैं संपत्ति IsEnabled
की बाध्यकारी को मार दूंगा जिसमें DataContext
है।
और जहां तक मुझे पता है, MultiBinding
भी एक समाधान नहीं है क्योंकि यह कई स्रोतों के खिलाफ संपत्ति को बांधने के लिए एक तंत्र प्रदान करता है लेकिन विभिन्न संदर्भों और स्रोतों के खिलाफ बाध्यकारी विभिन्न गुण प्रदान नहीं करता है।
इस बारे में सोचते समय, यह मेरे दिमाग में आया कि सौभाग्य से मैं ImageSource
rigmarole को IValueConverter
में स्थानांतरित कर सकता हूं। मेरे RibbonMenuButton
के दिए गए डेटा संदर्भ में मेरे पास उपयुक्त मान के साथ एक स्ट्रिंग मान है जो वास्तव में मेरे ImageSource
का स्रोत भी है।
वैसे भी, मैं अब भी सोच रहा हूं कि अगर मैं अन्य दृष्टिकोण नहीं था, तो मैं समस्या का समाधान कैसे करूंगा, यानी यदि दोनों स्रोत विभिन्न डेटा संदर्भों में थे। क्या कुछ ऐसा है जो मैं नहीं देख रहा हूं? मैं कैसे सुनिश्चित कर सकता हूं कि DataContext
को ओवरराइट करके अन्य बाध्यकारी को मारना न भूलें और गतिशील संसाधन की संपत्ति के खिलाफ बाध्यकारी हो?
imageSource
सुंदर DrawingImage msdn page पर XAML उदाहरण के रूप में एक ही है।
<Image x:Key="imageSource">
<Image.Source>
<DrawingImage>
...
क्या आप कोड पोस्ट कर सकते हैं जहां आप "छवि स्रोत" संसाधन को परिभाषित करते हैं? –