2012-02-11 5 views
1

왜이 예제에서 세부 사항을 보지 못합니까? 나는 dataclass, master 클래스 및 detail 클래스의 구조를 변경할 수 없다. 그래서 올바른 바인딩으로이 문제를 해결해야합니다. WPF의 마스터 디테일 바인딩

public class ViewModel 
{ 
    public dataclass data { get; set; } 

    public ViewModel() 
    { 
     data = new dataclass(); 
     master a_master = new master(); 
     a_master.mastername = "hello"; 
     detail a_detail = new detail(); 
     a_detail.detailname = "goodbye"; 
     data.details.Add(a_detail); 
     data.Add(a_master); 
    } 
} 


public class dataclass : ObservableCollection<master> 
{ 
    public ObservableCollection<detail> details { get; set; } 

    public dataclass() 
    { 
     details = new ObservableCollection<detail>(); 
    } 
} 


public class master 
{ 
    public string mastername { get; set; } 


} 


public class detail 
{ 
    public string detailname { get; set; } 
} 

그리고

내 XAML에서 나는 다음과 같은 바인딩 오전 :

<Window x:Class="md.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:vm="clr-namespace:md.viewmodels" 
     Title="MainWindow" Height="350" Width="525"> 
    <Window.DataContext> 
     <vm:ViewModel/> 
    </Window.DataContext> 
    <StackPanel Orientation="Vertical" > 
     <ListView ItemsSource="{Binding Path=data}"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="master" DisplayMemberBinding="{Binding mastername}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <ListView ItemsSource="{Binding Path=data/details}"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="detail" DisplayMemberBinding="{Binding detailname}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </StackPanel> 
</Window> 
+0

먼저 답을 수락해야합니다. – Bernard

답변

5

난 당신이었다 달성하기 위해 노력 어떻게 생각 대신

<ItemsSource="{Binding Path=data/details}"> 

<ItemsSource="{Binding Path=data.details}"> 

시도 일종의 매스/How to: Use the Master-Detail Pattern with Hierarchical Data에 묘사 된 계층 적 데이터에 바인딩 된 세부 시나리오. 사실, 에서 파생 된 클래스의 속성으로 ObservableCollection<details>을 보유하고있는 한 계층 적이 아니므로 바인딩 표현식에 /이 작동하지 않습니다. /에 대한 자세한 내용은 PropertyPath XAML Syntax 섹션 소스 통과 (컬렉션의 계층 구조에 바인딩) 섹션을 참조하십시오.

또한 C#에서 capitalization에 대한 널리 통용되는 규칙이 있습니다. 여기서 클래스 및 속성과 같은 공용 유형에는 파스칼 (Pascal) 대/소문자를 사용해야합니다.

+0

"."로 이것을 보지 마십시오. 그러나 그것은 속임수입니다. –

+2

파스칼 케이스에 대한주의 사항에 유의하십시오. – Clemens

+0

나는 이것을 바꿀 수있다. 나는 바인딩에서의 나의 오류에 대해 배우고 싶었다. 내 실제 응용 프로그램은 마스터와 세부 정보가 엔티티 프레임 워크 클래스입니다. 중첩 된 관측 값이 아닌 경우 목록 뷰의 데이터를 바인딩에로드하려면 어떻게해야합니까? –

관련 문제