2010-07-15 17 views
5

मेरे पास प्रत्येक स्तर को प्रारूपित करने के लिए डेटा के 2 स्तर और 2 HierarchicalDataTemplate के साथ एक WPF TreeView है। दूसरे स्तर पर HierarchicalDataTemplate से, मुझे पहले स्तर की कक्षा में एक संपत्ति बांधना होगा। मैं इस तरह से कोशिश की है, लेकिन यह dosn't काम: यहां तक ​​कि इस तरह से यह काम करता है dosn't प्रॉपर्टीएचपीएफ बाध्यकारी मूल संपत्ति HierarchicalDataTemplate

के नाम के रूप में

Text="{Binding Path=Ori, RelativeSource={RelativeSource TemplatedParent}}" 

Ori साथ:

Text="{Binding Path=tOri, RelativeSource={RelativeSource TemplatedParent}}" 

TextBlock के नाम के रूप में fisrt HierarchicalDataTemplate में Ori प्रोपरी को बांधें।

क्या आप मेरी मदद कर सकते हैं?

उत्तर

9

टेम्पलेटेड माता-पिता केवल नियंत्रण कक्ष के अंदर मूल नियंत्रण को संदर्भित करता है और इसलिए डेटा टेम्पलेट्स के साथ काम नहीं करता है। आप parent TreeViewItem का पता लगाने के लिए FindAncestor का उपयोग कर सकते हैं और उसके बाद अपने डेटाकॉन्टेक्स्ट तक पहुंच सकते हैं।

Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}, AncestorLevel=2}, Path=DataContext.Ori}" 
+0

धन्यवाद! मैंने आपके समाधान की कोशिश की लेकिन यह काम नहीं किया क्योंकि मुझे नहीं पता था कि मुझे "पूर्वज एलवेल = 2" – lamarmora

0

आप TemplatedParent गलत समझा है WPF में बाध्यकारी। TemplatedParent विरासत नियंत्रण को संदर्भित करता है कि आप का विस्तार कर रहे हैं। उदाहरण: अगर मैंने ControlTemplate लिखा है जिसने Button को लक्षित किया है।

<ControlTemplate TargetType="{x:Type Button}" x:Key="MyButtonTemplate"> 
    <Border BorderBrush="{TemplateBinding Property=Background}" BorderThickness="3" > 
     <ContentPresenter Margin="10"/> 
    </Border> 
</ControlTemplate> 

इस आधार Button.Background संपत्ति को BorderBrush बाध्यकारी है।

आप जो चाहते हैं उसे प्राप्त करने के लिए, आपको माता-पिता को खोजने के लिए दृश्य बार्स को चलने की आवश्यकता है और फिर बाध्यकारी प्रदर्शन करें। Mole WPF या Snoop का उपयोग करने में मदद करने के लिए।

नोट: ऊपर उपलब्ध स्नूप की प्रति में कुछ गंभीर समस्याएं हैं, यानी, 256-स्तर से अधिक गहरे नहीं जा सकते हैं। मेरे पास एक पैच और फीचर विस्तारित संस्करण है जो कमाल है। विकास के दौरान डीबग/विज़ुअलाइज़ करने के लिए मोल और स्नूप 2 का उपयोग करने के बीच एक इंटरचेंज।

+1

लिखना है स्नूप का नवीनतम संस्करण http://snoopwpf.codeplex.com/ पर है और इसमें सभी संयुक्त फिक्स हैं 32 और 64 बिट समर्थन के अलावा अन्य संस्करणों से और .NET 4. रिलेटिवसोर्स टेम्पलेटेड पेरेंट के साथ टेम्पलेट बाइंडिंग को भ्रमित करने के बारे में सावधान रहें। वे अलग-अलग तंत्र हैं जो समान चीजें करते हैं लेकिन टेम्पलेट बाइंडिंग बहुत अधिक प्रतिबंधित है जिसमें यह केवल माता-पिता पर मिलान प्रकार की संपत्ति को इंगित कर सकता है और इसमें बाध्यकारी (कन्वर्टर्स, जटिल पथ इत्यादि) पर उपलब्ध अन्य विकल्पों में से कोई भी विकल्प नहीं है। । –

+0

@ जॉन: स्नूप पर अपडेट के लिए धन्यवाद; मैं अपनी शाखा में नवीनतम और एकीकृत हो जाऊंगा - शायद ऐसे फिक्स/फीचर्स हैं जिन्हें मैं योगदान दे सकता हूं। – Dennis

+0

@ जॉन: हाँ, मुझे दोनों के बीच अंतर समझा जाना चाहिए था। जैसा कि आपने समझाया है, 'टेम्पलेट बाइंडिंग' बहुत सीमित है, और इसे संकलित समय पर हल किया गया है जबकि 'रिलेटिवसोर्स टेम्पलेटेड पैरेंट' को रनटाइम पर हल किया जाता है (बाइंडिंग इंजन का उपयोग करके)। – Dennis

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