2011-01-28 49 views
8

我需要列表視圖視圖設置爲具有這樣的複雜的首標(基於我創建3維對象列表上)一個gridview:多級標頭的GridView WPF

| ---------- LEVEL 0 ------------ | 
| -- Level 1a -- | -- Level 1b -- | 
| Lvl A | Lvl B | Lvl A | Lvl B | 

編輯:這是更礦石少我的對象模型

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; } 
} 

我已經結合的Measures的動態列表(這是我的0電平),那麼Threshold(水平1A ...)的動態列表和爲每個閾值顯示值1到4如果他們是!= 0

+0

怎樣堆疊多個gridviewrowheaderpresenter?這可能是一個好方法?我被困在這個問題中... – michele 2011-01-28 16:13:14

+0

我們可以更好地瞭解您的對象模型/數據的外觀嗎? – RQDQ 2011-01-31 14:12:25

+0

@RQDQ我添加了我需要顯示的objectmodel – michele 2011-01-31 14:33:12

回答

1

怎麼是這樣的:

<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> 

您可能需要的值1,值屬性轉換成一個集合,以便動態顯示非零集合,並使用我用來顯示閾值的相同ListBox/StackPanel方法。

這使輸出:

Screenshot

而剛剛完成後,這裏是我使用的代碼:

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

Level 0是一個ListView?級別1A和級別1b是您希望在級別0列表視圖內的兩個不同模板列內的Gridviews?然後,級別A和級別b是在級別1a和級別1b中的兩個更多模板列中的兩個更多網格視圖?

您可能能夠這樣嵌套GridView控件使用相同的概念轉化爲WPF

http://forums.asp.net/t/1071521.aspx

我還沒有嘗試過自己在WPF,但GridView的似乎是類似的建造。 只需使用面板而不是Divs,並且不必擔心客戶端/服務器端的呼叫。

此外,數據集工作更好,然後列出。

這裏是我如何設置一些僞代碼嵌套數據集之前

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

非常感謝你的提示。不幸的是,使用嵌套gridviews似乎不是解決我的問題。我需要只有一個列表視圖,顯示最低級別(lvl A,lvlB):上層只是描述性的,我需要他們知道哪個對象引用了lvlA等。 – michele 2011-01-31 09:20:11

0

你有沒有想過應該如何行事 - 你的頭那是?

製作一個看起來像你所建議的標題很容易 - 你可以用一些網格編程構建它 - 但這只是標題。你是否也可以像使用listview頭一樣調整它的大小?

也許你正在尋找類似於TreeListView的東西?

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

我認爲這是我會去後顯示多維數據 - 這是很容易理解和使用,其中一個自定義列表視圖中是很難實現的行爲的權利。