2011-01-28 19 views
8

I (i oluşturulan bir 3 boyutlu nesnenin listesinde göre) Bu gibi karmaşık bir başlığa sahip bir GridView liste görünümü görünümünü ayarlamak gerekir cevher az benim nesne modeliÇok seviyeli başlık GridView WPF

public class Measures 
{ 
    public string Caption { get; set; } 
    public List<Threshold> ThresholdList { get; set; } 
} 

public class Threshold 
{ 
    public string Caption { get; set; } 

    public double Value1 { get; set; } 
    public double Value2 { get; set; } 
    public double Value3 { get; set; } 
    public double Value4 { get; set; } 
} 

i, sonra Threshold (seviye 1a ...) dinamik listesi (bu benim düzey 0'dır) Measures dinamik listesini bağlamak ve her eşik gösterge değerleri 1 için ettik 4 eğer öyleyse! = 0

+0

Birden çok gridviewrowheaderpresenter'ı istiflemeye ne dersiniz? İyi bir yol olabilir mi? Bu problemde sıkışıp kaldım ... – michele

+0

Nesne modelinizin/verilerinizin neye benzediğini daha iyi anlayabilir miyiz? – RQDQ

+0

@RQDQ Ben – michele

cevap

1

böyle bir şey hakkında nasıl

<ListBox x:Name="MainListBox"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="Auto" /> 
          <RowDefinition Height="Auto" /> 
         </Grid.RowDefinitions> 

         <Label Content="{Binding Path=Caption}" HorizontalAlignment="Center" /> 

         <ListBox Grid.Row="1" ItemsSource="{Binding Path=ThresholdList}" > 
          <ListBox.ItemsPanel> 
           <ItemsPanelTemplate> 
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch"> 
            </StackPanel> 
           </ItemsPanelTemplate> 
          </ListBox.ItemsPanel> 

          <ListBox.ItemTemplate> 
           <DataTemplate> 
            <Grid> 
             <Grid.RowDefinitions> 
              <RowDefinition Height="Auto" /> 
              <RowDefinition Height="Auto" /> 
             </Grid.RowDefinitions> 

             <Label Content="{Binding Path=Caption}" HorizontalAlignment="Center" /> 

             <StackPanel Grid.Row="1" Orientation="Horizontal"> 
              <Label Content="{Binding Path=Value1}" /> 
              <Label Content="{Binding Path=Value2}" /> 
              <Label Content="{Binding Path=Value3}" /> 
              <Label Content="{Binding Path=Value4}" /> 
             </StackPanel> 
            </Grid> 
           </DataTemplate> 
          </ListBox.ItemTemplate> 


         </ListBox> 

        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Sen içine değer1, değer2 özelliklerini dönüştürmek gerekebilir Sıfır olmayanları dinamik olarak görüntülemek ve eşikleri görüntülemek için kullandığım aynı ListBox/StackPanel yaklaşımını kullanmak için bir koleksiyon.

Bu

çıktıyı verir:

Screenshot

Ve sadece yazıyı tamamlamak için, burada kullanılan kod:

List<Measures> measuresList = new List<Measures>(); 

Measures measures = new Measures() 
{ 
    Caption = "LEVEL 0", 
    ThresholdList = new List<Threshold>() 
}; 

measures.ThresholdList.Add(new Threshold() 
{ 
    Caption = "Level 1a", 
    Value1 = 1, 
    Value2 = 2, 
    Value3 = 3, 
    Value4 = 4 
}); 

measures.ThresholdList.Add(new Threshold() 
{ 
    Caption = "Level 1b", 
    Value1 = 5, 
    Value2 = 6, 
    Value3 = 7, 
    Value4 = 8 
}); 

measuresList.Add(measures); 

this.MainListBox.ItemsSource = measuresList; 
+0

Teşekkür ederim, iyi bir ipucu gibi görünüyor, en kısa zamanda deneyeceğim! Tek şüphem, bir liste görünümü kullanmam gerektiğidir. Şimdiye kadar yazdığım objectmodel n satırında tekrarlandı (n üyesini temsil ediyor). Şimdi daha basit bir çözüm kullanıyorum (çünkü projenin son başvuru tarihleri ​​beklemiyor), ama yine de daha zarif bir çözüm arıyorum! – michele

+0

@michele - bu yaklaşım hala birden çok ölçü nesnesi ve birden çok Eşik nesnesi için çalışır. Çözmeye çalıştığın şey bu mu? – RQDQ

+0

Kod örneğini deniyorum. Çalışıyor, ama bu ağaç yapısını liste görünümünün başlığına koymam gerekiyor, liste görünümündeki satırlar yalnızca alt düzey değerlerini göstermelidir. Örneğiniz ağacı her sıraya yerleştirir ve bundan kaçınmaya çalışıyorum. Tek çözümün tam bir özel kontrol yazması olduğunu düşünüyorum. Tekrar teşekkürler – michele

0

0 Seviye ListView mi? Seviye 1A ve seviye 1b, seviye 0 Liste görünümünde iki farklı şablona yerleştirilmiş sütun içinde istediğiniz Gridviews'tır. Daha sonra seviye A ve seviye b, seviye 1a ve seviye 1b'de 2 daha fazla standartlaştırılmış sütun içinde iki ızgara görünümüdür?

Sen wpf kendim denemedim http://forums.asp.net/t/1071521.aspx

WPF

içine bu iç içe GridView kullanan aynı kavram dönüştürmek mümkün olabilir, ancak gridviews benzer inşa edilecek çıktı. Sadece istemci/sunucu aramaları hakkında endişelenmek zorunda kalmadan Div'ler yerine paneller ve daha az kafa ağrıları kullanın.

Ayrıca Veri Kümeleri daha güzel çalışır ve listeler. İşte

ben kurdum konusunda bazı psuedo kodudur İçiçe Datasets önce

DataSet ds1 = new DataSet(); 
     ds1.Tables.Add(m_DataLayer.GetRealA_Data(X, Y).Copy()); Returns Table ["A"] 
     ds1.Tables.Add(m_DataLayer.GetB_Empty().Copy());// Returns Table ["B"] 
     ds1.Tables.Add(m_DataLayer.GetC_Empty().Copy());// Returns Table ["C"] 
     ds1.Tables.Add(m_DataLayer.GetD_Empty().Copy());// Returns Table ["D"] 

     ds1.Relations.Add("b", ds1.Tables["A"].Columns["A_id"], ds1.Tables["B"].Columns["A_id"]); 
     ds1.Relations.Add("c", ds1.Tables["B"].Columns["B_id"] 
      , ds1.Tables["C"].Columns["B_id"]); 
     ds1.Relations.Add("d", ds1.Tables["C"].Columns["C_id"] 
      , ds1.Tables["D"].Columns["D_id"]); 

     dt_TheGridViewDataSet = ds1; 
     TheGridView.DataSource = ds1; 
+0

görüntülemek için gereken objectmodel ekledim ipucu için çok teşekkür ederim. Ne yazık ki, iç içe geçmiş ızgara görüşleriyle çalışmak problemimin çözümü gibi görünmüyor. En düşük seviyeyi (lvl A, lvlB) gösteren tek bir liste görünümüne ihtiyacım var: Üst seviyeler sadece tanımlayıcıdır, lvlA ect'e hangi nesneye başvurduğunu bilmem gerek. – michele

0

bunu nasıl davranmaları gerektiğini düşündünüz mü - senin başlık yani?

Önerdiğinize benzeyen bir başlık oluşturmak için yeterince kolaydır - bunu bazı ızgaralarla programlanabilir şekilde oluşturabilirsiniz - ancak bu yalnızca başlıktır. Normalde bir liste görüntüleme başlığında olduğu gibi yeniden boyutlandırabiliyor musunuz?

Belki bir TreeListView gibi bir şey mi arıyorsunuz?

http://www.codeproject.com/KB/WPF/TreeListView.aspx

Bunu ben de çok boyutlu verileri görüntülemek üzere peşine ne olduğunu düşünüyorum - bunu anlamak kolaydır ve özel bir listview zor olabilir kullanımı doğru davranmaya uygulamaktır.

+0

ipucu için teşekkürler. Boş zamanım olduğunda bu kontrolü denemek istiyorum! – michele