2008-12-09 82 views
1

我有一些数据有一个详细表。我希望数据在ListView中呈现。当你选择原始列表中的一个项目时,我希望细节数据显示为嵌套的ListView。我似乎无法弄清楚如何让数据绑定工作。在WPF中嵌套ListViews的分层数据绑定

这里是我到目前为止,(问题是{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

你从绑定中得到什么输出不起作用? (只是所以你知道,“金额”有一个“米”......) – Donnelle 2008-12-09 22:25:24

+0

它适用于我的相同的数据设置http://stackoverflow.com/questions/350214/wpf-use-a-列表框-IN-A-模板 - 即,将待的模板 - 的 - 另一个-列表框。您使用的数据设置和来源是什么? – Donnelle 2008-12-09 23:44:43

回答

1

如果我正确理解你的问题,你需要绑定到原始列表的的SelectedItem:

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

然后根据需要设置数据模式/视图。如果你不想为绑定使用ElementName,你也可以使用RelativeSource,但是我发现ElementName更易于阅读和理解。

0

您需要将您的问题行更改为以下:

<ListView ItemsSource="{Binding FK_History_HistoryItems}"> 

随着这种变化,控制精美的作品。我一直在做一些类似无用的事情。我真的很喜欢你的工作。

0

为了得到触发工作,你将需要设置的ControlTemplate的TargetType:

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

没有被的TargetType指定(作为可选类型),将XAML渲染会迷茫......