xVl

2013-01-21 5 views
8

में TreeViewItems के साथ ListView मैं C# के लिए बहुत नया हूं, पहली चीज़ जो मैं बनाने की कोशिश कर रहा हूं वह ListView डेटा बाइंडिंग के साथ ठीक है।xVl

अब अंतर्निहित मॉडल में कोई बच्चा है (जैसे TreeView) आइटम अब एक मोड़ बटन बनाने की कोशिश कर रहा है। प्रत्येक बच्चे के पास सभी शीर्ष स्तर की वस्तुओं के समान कॉलम होंगे।

मैं यह करने के बारे में कैसे जाउंगा? क्या इस तरह पहले से ही मौजूदा नियंत्रण है? यदि नहीं, तो की तरह देखने के लिए TreeView ड्रेस अप करने से बेहतर होगा, या TreeView की तरह दिखने के लिए ListView तैयार करें?

मैं solution में उल्लिखित सड़क से नीचे चला गया जो TreeView पहनता है, लेकिन अंतिम परिणाम बहुत भयानक लग रहा है और शीर्षक वास्तव में केवल एक आइटम है, इसलिए आप सभी अच्छे कॉलम आकार और कॉलम बटन खो सकते हैं जो हुक अप कर सकते हैं कॉलम सॉर्टिंग के लिए जो आपको ListView में मिलता है ताकि मार्ग वास्तव में ऐसा लगता है जैसे यह अधिक काम करेगा।

मैंने देखा कि नया टास्क मैनेजर का नियंत्रण बिल्कुल ठीक है जैसा मैं बनाने की कोशिश कर रहा हूं, मुझे नहीं पता कि यह कैसे बनाया गया? शायद सी में हालांकि।

ListView with TreeView items

उत्तर

3

क्या आप का वर्णन एक TreeListView की तरह एक सा लगता है, और यदि आप 'WPF TreeListView' google आप कुछ समाधान है कि आप के लिए अच्छा हो सकता है देखेंगे। मैंने Telerik से एक का उपयोग किया है, लेकिन यह आपकी आवश्यकताओं के अनुरूप कितना जटिल हो सकता है।

यदि आप केवल आपके द्वारा संलग्न छवि की तरह एक उप-स्तर चाहते हैं, तो आप पहले कॉलम के लिए एक जटिल डेटा टेम्पलेट के साथ एक सूची दृश्य का उपयोग करके अपना खुद का रोल करना चाहेंगे जो एक विस्तारक बटन दिखाएगा और एक साधारण सूची बॉक्स बच्चों के सामान

answer here के समान, आपके सेल को तीर, आइटम के लिए टेक्स्ट और एक बच्चे सूची बॉक्स की तरह दिखने के लिए एक चेकबॉक्स होगा। फिर चेकबॉक्स की स्थिति में बच्चे सूची बॉक्स की दृश्यता को बाध्य करें।

10

माइक्रोसॉफ्ट एक ऐसा नमूना प्रदान करता है जो आप खोज रहे हैं। उदाहरण के एक लेख यहां पाया जा सकता:

enter image description here

वहाँ एक बड़ी है:

http://msdn.microsoft.com/en-us/library/vstudio/ms771523(v=vs.90).aspx

जब आप का निर्माण और उदाहरण चलाते समय यह कुछ मिलता-जुलता साथ खत्म हो जाएगा उदाहरण में किए गए टेम्पलेटिंग की मात्रा, ताकि आप चीजों को अपनी इच्छानुसार दिख सकें।

+0

फैमिली गाय संदर्भ के लिए :) – bouvierr

+0

+1 मैं wasn ' हमेशा बुराई, आप जानते हैं। –

8

StyleListView पर यह संभवतः आसान होगा, मेरे पास एक त्वरित खेल था और लगभग 10 मिनट में एक नकली बनाने में कामयाब रहा।

enter image description here

जाहिर है आप इसे करने के लिए और अधिक जोड़ना चाहते हैं, लेकिन यह बहुत एक TreeViewListView स्तंभ के अंदर की मेजबानी करने के लिए आसान लगता है।

यदि आप निर्माण करने के लिए उपयोग करना चाहते हैं तो यहां नकली कोड है।

Xaml:

<Window x:Class="WpfApplication8.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="233" Width="405" Name="UI"> 
    <Grid DataContext="{Binding ElementName=UI}"> 
     <ListView ItemsSource="{Binding Processes}" > 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Process" Width="200" > 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel> 
            <TreeView BorderThickness="0" ItemsSource="{Binding Processes}" > 
             <TreeView.ItemTemplate> 
              <HierarchicalDataTemplate ItemsSource="{Binding Processes}"> 
               <TextBlock Text="{Binding Name}" /> 
              </HierarchicalDataTemplate> 
             </TreeView.ItemTemplate> 
            </TreeView> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="CPU" > 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding CpuUsage, StringFormat={}{0} %}" TextAlignment="Right" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Memory" > 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <TextBlock Text="{Binding MemUsage, StringFormat={}{0} MB}" TextAlignment="Right" /> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="VerticalContentAlignment" Value="Top" /> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 
    </Grid> 
</Window> 

कोड: treeible mockup डेटा लोड हो रहा है :) के बारे में खेद

public partial class MainWindow : Window 
    { 
     private ObservableCollection<ProcessInfo> _processes = new ObservableCollection<ProcessInfo>(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
      Processes.Add(new ProcessInfo 
      { 
       CpuUsage = 10.3, 
       MemUsage = 48.9, 
       Processes = new ObservableCollection<Process>() 
      }); 
      var pro = new Process{ Name = "Process1", Processes = new ObservableCollection<Process>()}; 
      pro.Processes.Add(new Process { Name = "SubProcess1", Processes = new ObservableCollection<Process>() }); 
      Processes[0].Processes.Add(pro); 
      Processes.Add(new ProcessInfo 
      { 
       CpuUsage = 0, 
       MemUsage = 100, 
       Processes = new ObservableCollection<Process>() 
      }); 
      var pro2 = new Process { Name = "Process2", Processes = new ObservableCollection<Process>() }; 
      pro2.Processes.Add(new Process { Name = "SubProcess1", Processes = new ObservableCollection<Process>() }); 
      pro2.Processes.Add(new Process { Name = "SubProcess2", Processes = new ObservableCollection<Process>() }); 
      pro2.Processes.Add(new Process { Name = "SubProcess3", Processes = new ObservableCollection<Process>() }); 
      Processes[1].Processes.Add(pro2); 
     } 

     public ObservableCollection<ProcessInfo> Processes 
     { 
      get { return _processes; } 
      set { _processes = value; } 
     } 
    } 

    public class ProcessInfo 
    { 
     public ObservableCollection<Process> Processes { get; set; } 
     public double CpuUsage { get; set; } 
     public double MemUsage { get; set; } 
    } 

    public class Process 
    { 
     public string Name { get; set; } 
     public ObservableCollection<Process> Processes { get; set; } 
    } 

गुड लक :)