2011-01-28 2 views
8

는 I (나는 작성된 3 차원 객체리스트에 기초하여)과 같은 복잡한 헤더를 가지고있는 gridview에리스트 뷰 뷰를 설정해야 광석 이하 내 객체 모델다단계 헤더의 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; } 
} 

그때, Threshold (레벨 1A ...)의 동적리스트 (이 내 레벨 0) Measures 동적리스트를 결합하고, 각 임계 표시 values1위한하도록했습니다 4 인 경우 = 0

+0

여러 개의 Gridviewrowheader 프레젠터를 스태킹하는 것은 어떻습니까? 좋은 방법 일 수 있니? 나는이 문제에 갇혀있다 ... – michele

+0

개체 모델/데이터가 어떻게 보이는지 더 잘 이해할 수 있습니까? – RQDQ

+0

@RQDQ 표시 할 objectmodel을 추가했습니다. – michele

답변

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, 값 속성을 변환해야 할 수도 있습니다 0이 아닌 값을 동적으로 표시하고 임계 값을 표시하는 데 사용한 동일한 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

감사합니다. 좋은 힌트가 될 것 같습니다. 내 유일한 의심은 내가 지금까지 작성한 objectmodel이 n 행 (n 멤버를 나타내는)에 대해 반복되는 목록 뷰를 사용해야한다는 것입니다. 이제는 더 단순한 솔루션을 사용하고 있습니다 (프로젝트의 마감 시간이 길지 않아도 됨). 그러나 여전히 더 우아한 솔루션을 찾고 있습니다! – michele

+0

@michele -이 방법은 여러 측정 개체와 여러 임계 개체에서 여전히 작동합니다. 그게 당신이 풀려고하는 것입니까? – RQDQ

+0

코드 예제를 시험해 보겠습니다. 그것은 작동하지만 목록 구조의 머리글에 트리 구조를 설정해야하는데 listview의 행은 맨 아래 수준 값만 표시해야합니다. 귀하의 예제는 모든 행 안에 트리를 설정하고 그것을 피하려고합니다. 유일한 해결책은 전체 사용자 정의 컨트롤을 작성하는 것입니다. 다시 고마워요 – michele

0

수준 0 ListView입니까? 레벨 1A 및 레벨 1b는 레벨 0 목록보기 내의 두 개의 서로 다른 템플릿 된 열 내부에 원하는 GridView입니까? 그런 다음 레벨 A와 레벨 b는 레벨 1a와 레벨 1b의 템플릿 화 된 열 2 개 안에 두 개의 더 많은 격자보기입니까?

당신은 내가 WPF에서 그것을 자신을 시도하지 않은 http://forums.asp.net/t/1071521.aspx

WPF

에이 중첩의 GridView가 사용하는 것과 동일한 개념을 변환 할 수 있습니다,하지만있는 GridViews 유사하게 건설 될 것처럼 보였다. 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로 작업 내 문제에 대한 해결책으로 보이지 않습니다. 하나의 listview가 있어야하는데, 그것은 가장 낮은 레벨 (lvl A, lvlB)을 보여줍니다 : 상위 레벨은 서술 적이기 때문에, 어떤 오브젝트가 어떤 오브젝트를 참조 하는지를 알 필요가 있습니다. – michele

0

당신이 그것을 행동해야하는지에 대해 생각 해본 적이 - 당신의 헤더 그건?

당신이 제안한 것과 같은 헤더를 만들면 충분히 쉽습니다 - 프로그래밍 방식으로 일부 그리드를 사용하여 헤더를 만들 수는 있지만 머리글 일뿐입니다. 일반적으로 listview 헤더로 할 수있는 것처럼 크기를 조정할 수 있어야합니까?

아마도 TreeListView와 같은 것을 찾고 있을까요?

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

나는 그게 내가 multidimentional 데이터를 표시 한 후 갈 것입니다 무슨 생각 -은 이해하기가 쉽고 사용자 정의 목록보기가 어려울 수 있습니다 사용, 바로 행동을 구현 할 수 있습니다.

+0

힌트를 가져 주셔서 감사합니다. 내가 자유 시간을 가졌을 때 나는 그 통제를하고 싶다! – michele