2009-04-05 17 views
5

एक TreeViewItem में एक वस्तु (जैसे कि, एक वर्ग का एक उदाहरण) संग्रहीत करने के लिए में एक वस्तु के भंडारण, मैं वर्तमान में वस्तु भंडारण कर रहा हूँ TreeViewItem के Header और फिर उस वर्ग के ToString विधि अधिभावी , ताकि यह सही स्ट्रिंग हेडर प्रदर्शित करता हो; फिर मैंने ऑब्जेक्ट को किसी ईवेंट के दौरान वापस डाला।WPF: सही ढंग से एक TreeViewItem


क्या यह इस तरह की चीज़ को प्राप्त करने का सही तरीका है, या क्या कोई बेहतर, अधिक उचित तरीका है?

Person.cs:

उत्तर

7

"उचित" जिस तरह से सिर्फ TreeView को object के (या TreeViewItem के) Items संकलन जोड़ना और एक HierarchicalDataTemplate का उपयोग कैसे आइटम प्रदान की गई है को नियंत्रित करने के लिए है:

public class Person 
{ 
    private readonly ICollection<Person> _children = new ObservableCollection<Person>(); 

    public string Name { get; set; } 

    public ICollection<Person> Children 
    { 
     get 
     { 
      return _children; 
     } 
    } 
} 

Window1.xaml.cs:

public Window1() 
{ 
    InitializeComponent(); 

    var people = new List<Person>(); 
    var kent = new Person() { Name = "Kent" }; 
    kent.Children.Add(new Person() { Name = "Tempany" }); 
    people.Add(kent); 
    _treeView.ItemsSource = people; 
} 

Window1.xaml:

<TreeView x:Name="_treeView"> 
    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type local:Person}" ItemsSource="{Binding Children}"> 
      <TextBlock Text="{Binding Name}"/> 
     </HierarchicalDataTemplate> 
    </TreeView.Resources> 
</TreeView> 
+0

जवाब के लिए धन्यवाद। बोलने के लिए "नेस्टेड पदानुक्रमित डेटा टेम्पलेट" को कैसे कार्यान्वित करें? उदाहरण के लिए, आइटम्ससोर्स बाइंडिंग में आइटमों में उनके अंदर एक और सूची है, और मैं चाहता हूं कि सूची उनमें से एक सुस्त हो। –

+0

एनपी ड्रेस। क्या आप उत्तर के रूप में चिह्नित कर सकते हैं और नेस्टेड हाइरार्किकलडेटा टेम्पलेट्स पर एक अलग प्रश्न पूछ सकते हैं? –

+0

हाय केंट, करेंगे। –

1

ऊपर में मेरे विचार वास्तविक सवाल का जवाब नहीं है, और वास्तव में मूल प्रश्न इंगित करता है कि प्रश्न लेखक पहले से ही करने के लिए एक बहुत ही कुशल समाधान था "जवाब" मुसीबत। हालांकि, प्रदान किया गया "उत्तर" बस दिखाता है कि एक उप-ऑब्जेक्ट को TreeViewItem में कैसे संलग्न किया जाए और बाद में इसे कस्टम विधि का उपयोग करके कैसे प्रस्तुत किया जाए। हालांकि यह उपयोगी है, यह उत्तर मूल प्रश्न की वास्तविक प्रकृति को संबोधित नहीं करता है।

ऐसे कई परिदृश्य हैं जहां TreeViewItem को बाहरी ऑब्जेक्ट संलग्न करने की आवश्यकता होती है जो TreeViewItem की आइटम सूची में नहीं है। जब उपयोगकर्ता TreeViewItem को TreeView से चुनता है तो यह एप्लिकेशन-विशिष्ट उद्देश्यों के लिए संलग्न बाहरी ऑब्जेक्ट तक पहुंच की सुविधा प्रदान करता है। यह अवधारणा उप-ऑब्जेक्ट्स को TreeViewItem में जोड़ने के विचार से बिल्कुल अलग है।

इस समस्या को हल करने का एक वैकल्पिक तरीका, मूल रूप से प्रश्न लेखक द्वारा लागू समाधान के विपरीत, TreeViewItem क्लास को उप-वर्ग करना और संलग्न जानकारी जैसे कस्टम जानकारी जोड़ना है। यह सिद्धांत आलेख http://msdn.microsoft.com/en-us/library/1330h6a4.aspx में चित्रित किया गया है। इस कस्टम TreeViewItem उपclass को लागू करने के बाद, यह सबक्लास किसी TreeView या TreeViewItem की आइटम सूची में जोड़ा जा सकता है। जब उपयोगकर्ता TreeView से आइटम का चयन करता है, तो चयन से लौटाई गई वस्तु कस्टम उप-वर्ग होगी, जिसमें उपclass परिभाषित किए गए किसी भी कस्टम जानकारी को शामिल किया जाएगा।

TreeViewItem के बजाय एक कस्टम TreeViewItem उपclass का उपयोग करने का एक अतिरिक्त लाभ यह है कि कस्टम व्यवहार subclass द्वारा कार्यान्वित किया जा सकता है। उदाहरण के लिए, एक कस्टम टूलटिप प्रदर्शित करने के लिए जब उपयोगकर्ता आइटम पर माउस होवर, उपवर्ग की तरह कोड के साथ खुद के लिए एक टूलटिप वस्तु निर्धारित कर सकते हैं:

ToolTip tip = new ToolTip() { Content = "Tooltip display value" }; 
ToolTipService.SetToolTip(this, tip); 
संबंधित मुद्दे