2008-12-09 4 views
1

세부 테이블이있는 일부 데이터가 있습니다. 데이터를 ListView에 표시하려고합니다. 원래 목록에서 항목을 선택할 때 세부 정보가 중첩 된 ListView로 나타나길 원합니다. 데이터 바인딩을 작동시키는 방법을 알아낼 수 없습니다. 여기 WPF에서 중첩 된 ListView를 사용하여 계층 적 데이터 바인딩

는 (문제가 {Binding Path=FK_History_HistoryItems}입니다) 지금까지이 작업은 다음과 같습니다

<ListView Name="lstHistory" ItemsSource="{Binding Source={StaticResource History}}" SelectionChanged="lstHistory_SelectionChanged"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" Header="Name" Width="100" /> 
      <GridViewColumn DisplayMemberBinding="{Binding Path=Description}" Header="Description" Width="150" /> 
      <GridViewColumn DisplayMemberBinding="{Binding Path=Total, Converter={StaticResource moneyConvert}}" Header="Total" Width="100" /> 
      <GridViewColumn DisplayMemberBinding="{Binding Converter={StaticResource categoryAggregate}}" Header="Categories" Width="100" /> 
     </GridView> 
    </ListView.View> 
    <ListView.Resources> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ListViewItem}"> 
         <Border> 
          <StackPanel> 
           <Border Name="presenter" 
             Background="{TemplateBinding Background}" 
             BorderBrush="{TemplateBinding BorderBrush}" 
             BorderThickness="{TemplateBinding BorderThickness}" 
             Padding="{TemplateBinding Padding}"> 
            <GridViewRowPresenter /> 
           </Border> 
           <Border Name="details" Visibility="Collapsed" Margin="5" 
             BorderBrush="Black" BorderThickness="2"> 
            <StackPanel Margin="5"> 
             <ListView ItemsSource="{Binding Path=FK_History_HistoryItems}"> 
              <ListView.View> 
               <GridView> 
                <GridViewColumn DisplayMemberBinding="{Binding Path=Ammount}" Header="Ammount" Width="100" /> 
                <GridViewColumn DisplayMemberBinding="{Binding Path=Category}" Header="Category" Width="100" /> 
               </GridView> 
              </ListView.View> 
             </ListView> 
            </StackPanel> 
           </Border> 
          </StackPanel> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsSelected" Value="True"> 
           <Setter TargetName="details" Property="Visibility" Value="Visible" /> 
           <Setter TargetName="presenter" Property="Background" Value="Navy"/> 
           <Setter TargetName="presenter" Property="TextElement.Foreground" Value="White" /> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListView.Resources> 
</ListView> 
+0

바인딩에서 어떤 결과가 나오지 않습니까? (그리고 그냥 "Amount"에 "m"이 하나 있습니다 ...) – Donnelle

+0

http://stackoverflow.com/questions/350214/wpf-use-a-와 동일한 데이터 설정으로 저에게 적합합니다. template-of-another-listbox가 될 것입니다. 어떤 데이터 설정 및 소스를 사용하고 있습니까? – Donnelle

+0

압축 된 SQL Server 2008에는 기록 테이블과 FK_History_HistoryItems라는 FK 관계가있는 HistoryItems 테이블이 있습니다. TreeView 및 HierarcicalDataTemplate 함께 작동하지만 그것은 여기에서 작동하지 않는 것. –

답변

1

난 당신이 원래 목록의 selectedItem을 결합 할 필요가 제대로 질문을 이해한다면 :

<ListView ItemsSource="{Binding ElementName=lstHistory, Path=SelectedItem}"> 

그리고 필요에 따라 datatemplate/view를 설정하십시오. 바인딩에 ElementName을 사용하지 않으려면 RelativeSource를 사용할 수도 있지만 ElementName은 읽기 쉽고 이해하기 쉽습니다.

+0

나는 그것이 내가 필요한 것 같지 않다고 생각한다. 첫 번째 테이블에서 선택한 FK의 관련 테이블에 바인딩해야합니다. 사실, 두 번째 목록보기는 lstHistory의 SelectedItem 안에 있으므로이 작업이 어떻게되는지는 알 수 없습니다. –

0

는 다음에 문제점 라인을 변경해야 그 변화와

<ListView ItemsSource="{Binding FK_History_HistoryItems}"> 

은 컨트롤이 아름답게 작동합니다. 나는 아무 쓸모가없는 비슷한 일을 해왔다. 나는 네가이 일에 정말로 마음을 쓰는 것을 좋아한다.

0

작업에 트리거를 얻기 위해, 당신은의 ControlTemplate은 TargetType을 설정해야합니다 다음은 TargetType없이

<ControlTemplate TargetType="{x:Type ListViewItem}"> 

는 (선택 가능한 형식으로) 지정되지는 XAML 렌더링 혼란 것입니다 ...

관련 문제