2010-06-15 16 views
5

मैं XAML में बाइंडिंग निर्दिष्ट करने का एक बेहतर तरीका देकर अपना जीवन आसान बनाने के लिए कस्टम MarkupExtension लिखने का प्रयास कर रहा हूं। हालांकि मैं, अगर वहाँ किसी भी तरह से मैं उद्देश्य यह है कि फ़ाइल MarkupExtension में प्रयोग किया जाता है का प्रतिनिधित्व करता है का उपयोग कर सकते है पता करने के लिए करना चाहते हैं।WPF कस्टम मार्कअप एक्सटेंशन से "वर्तमान वर्ग" तक पहुंच

दूसरे शब्दों में लगता है मैं एक UserControl इस बात का एक डाटा मॉडल की एक विशेष गायन को परिभाषित करता है है मेरी कार्यक्रम। इस नियंत्रण में ग्रिड, सीमाओं और सामान्य लेआउट जैसी कई दृश्य सामग्री हैं। यदि मैं इस UserControl में कुछ तत्वों की किसी विशेष संपत्ति पर अपने MarkupExtension का उपयोग करता हूं, तो मैं UserControl के उदाहरण तक पहुंचना चाहता हूं, यह जानने के बिना कि यह किस प्रकार है (मैं प्रतिबिंब का उपयोग करने की योजना बना रहा हूं)।

क्या यह सब संभव है?

उत्तर

11

.NET 4.0 में, उन्होंने IRootObjectProvider क्षमता जोड़ा, लेकिन दुर्भाग्यवश, पिछले संस्करणों में यह संभव नहीं है। यदि आप .NET 4.0 में हैं, तो आप निम्न कार्य कर सकते हैं:

public override object ProvideValue(IServiceProvider serviceProvider) 
{ 
    var rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider; 
    var root = rootObjectProvider.RootObject; 
    // do whatever you need to do here 
} 
+0

मैं * .NET 4 का उपयोग कर रहा हूं! लेमे इसे आज़माएं। :) – devios1

+0

पूरी तरह से काम करता है! धन्यवाद! – devios1

+0

हमारे लिए कोई दूसरा रास्ता नहीं, 3.5 में फंस गया ?! : ((((((((((0 ( –

संबंधित मुद्दे