निम्नलिखित कोड काम नहीं करता है। मैं इसे काम करने लायक कैसे बनाऊ?डायनामिक रिसोर्स को डेटा बाध्यकारी क्यों काम नहीं करता है?
<Image Source="{DynamicResource {Binding VM.ImageKey}}" />
निम्नलिखित कोड काम नहीं करता है। मैं इसे काम करने लायक कैसे बनाऊ?डायनामिक रिसोर्स को डेटा बाध्यकारी क्यों काम नहीं करता है?
<Image Source="{DynamicResource {Binding VM.ImageKey}}" />
यह व्यवहार डिज़ाइन द्वारा है। बाध्यकारी केवल निर्भरता वस्तुओं की निर्भरता गुणों पर निर्भर करता है और मार्कअप एक्सटेंशन निर्भरता वस्तु नहीं है।
यह DynamicResource MarkupExtension का गलत उपयोग है। सही यह होगा:
<Image Source="{DynamicResource VM.ImageKey}" />
मान लें कि आप एक कुंजी "VM.ImageKey" इस तरह कहीं परिभाषित के साथ एक संसाधन है:
<Bla.Resources>
<BitmapImage x:Key="VM.ImageKey" UriSource="C:\Uri\To\Image.jpg" />
</Bla.Resources>
लेकिन यदि आप कुछ संपत्ति प्रपत्र वर्तमान DataContext
के खिलाफ बाध्य करने के लिए चाहते हैं आप DynamicResource
लेकिन Binding
उपयोग नहीं करना चाहिए:
<Image Source="{Binding VM.ImageKey}" />
अपने वर्तमान मान लिया जाये कि DataContext
एक उदाहरण एपी है कि वीएम नामक रोपर्टी को फिर से छविकी नामक एक संपत्ति है जिसे ImageSource का व्युत्पन्न प्रकार है।
यदि आप संसाधन कुंजी को गतिशील रूप से निर्दिष्ट करना चाहते हैं तो आपको इसे रिसोर्सकी मार्कअप एक्सटेंशन का उपयोग करके निर्दिष्ट करना चाहिए - यह सुनिश्चित नहीं है कि यह बाइंडिंग को जिस तरह से आप चाहते हैं, उसका समर्थन करता है। अधिक जानकारी के लिए here देखें।
यह काम नहीं कर सकता क्योंकि डायमिक रिसोर्स MarkupExtension है और dependency property नहीं है। डाटाबेसिंग केवल निर्भरता गुणों के साथ काम करता है।
हालांकि, अर्द्ध चिकनी वर्कअराउंड है। TextBlock को विस्तारित करने वाली डायनामिक टेक्स्टक्लॉक क्लास बनाएं।
XAML:
<TextBlock x:Class="Rebtel.Win.App.Controls.DynamicTextBlock"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"/>
codebehind:
public partial class DynamicTextBlock : TextBlock
{
public static readonly DependencyProperty TextKeyProperty = DependencyProperty.Register(
"TextKey", typeof(string), typeof(DynamicTextBlock), new PropertyMetadata(string.Empty, OnTextKeyChanged));
private static void OnTextKeyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var me = ((DynamicTextBlock)d);
if (e.NewValue != null)
{
me.TextKey = (string) e.NewValue;
}
}
public string TextKey
{
set { SetResourceReference(TextProperty, value); }
}
public DynamicTextBlock()
{
InitializeComponent();
}
}
उपयोग:
<local:DynamicTextBlock TextKey="{Binding TextKeyProperty}" />
TextKeyProperty तो एक प्रमुख ResourceDictionary में पाया जा सकता है कि देता है। एक छवि और इसकी स्रोत संपत्ति के लिए एक ही दृष्टिकोण लिया जा सकता है।
मुझे लगता है कि इस मामले में, VM.ImageKey
डेटा स्रोत पर एक संपत्ति को संदर्भित करता है जिसका मूल्य आप संसाधन शब्दकोश कुंजी के रूप में उपयोग करना चाहते हैं। विचार यह है कि आपका डेटा स्रोत यह निर्धारित कर सकता है कि संसाधन कुंजी की आपूर्ति करके कौन सी छवि का उपयोग किया जाता है। (इस पृष्ठ पर अन्य उत्तरों के अधिकांश उत्तर अनुपयोगी हैं, क्योंकि दुर्भाग्य से वे जो भी करने का प्रयास कर रहे हैं, उन्हें याद किया है, मान लें कि आप शाब्दिक पाठ "VM.ImageKey"
को संसाधन कुंजी के रूप में उपयोग करना चाहते हैं, जो मुझे पूरा यकीन है कि यह नहीं है आप पूछ रहे हैंयदि ImageKey एक पर एक स्थिर क्षेत्र या संपत्ति है https://stackoverflow.com/a/20566945/497397
इसके अलावा,:)
यह समर्थित होना प्रतीत नहीं होता है, लेकिन वहाँ एक और दृष्टिकोण है कि आप डेटा बाइंडिंग द्वारा निर्धारित एक प्रमुख के माध्यम से एक छवि संसाधन का चयन करने के लिए सक्षम कर सकते है वीएम कक्षा, आप इसे प्राप्त करने के लिए {x: Static} वाक्यविन्यास का उपयोग कर सकते हैं: <छवि स्रोत = "{गतिशील संसाधन {x: स्टेटिक एलसीएल: वीएम.इमेजकी}" /> जहां एलसीएल वीएम क्लियर- नाम स्थान। –