2012-12-13 72 views
0

我有两个列表视图,一个包含子项目视图及其项目模板的父项。WPF嵌套列表视图 - 父列表视图的selectedValue

<ListView Name="TopView"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <ListView ItemsSource="{Binding SubList}"Focusable="False"> 
        <ListView.Background> 
         <SolidColorBrush Color="Transparent"/>             
        </ListView.Background> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
          <Grid HorizontalAlignment="Stretch"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="50" /> 
            <ColumnDefinition Width="50" /> 
            <ColumnDefinition /> 
           </Grid.ColumnDefinitions> 
           <TextBlock Text="{Binding Path=Number}" Grid.Column="0" /> 
           <TextBlock Text="{Binding Path=Type}" Grid.Column="1" /> 
           <TextBlock Text="{Binding Path=Code}" Grid.Column="2" /> 
          </Grid> 
         </DataTemplate> 
        </ListView.ItemTemplate> 
      </ListView> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

每当尝试使用TopView.SelectedValue时,返回的值始终为空。

如何让父ListView成为唯一的ListView来接受选择事件而不是子ListView?我想我需要做一些事件路由,但我不知道是什么。

+0

你没有为你的外部listview定义的itemsource,所以它会返回null。 Whatelse应该回来吗? – dognose

+0

@dognose我通过TopView.Items.Add手动添加项目到构造函数中的顶部列表视图,所以我想它会通过该集合返回选定的项目\值。 –

+0

您可以参考[数据绑定XAML中的嵌套集合(WPF和Silverlight) - WebX - 网站首页 - MSDN博客](http://blogs.msdn.com/b/harryh/archive/2010/06/12/nested-集合,数据绑定功能于XAML的WPF和-silverlight.aspx) –

回答

1

好的,没想到你将数据绑定和手动填充混合在一起。我假设你的内部Listview使用select事件。你必须在树中泡一个,直到你点击TopView。将内部Listview处理程序中的e.handled属性设置为false,然后处理它应该引发下一个listview iirc的事件。

private void handleInner(object o, RoutedEventArgs e) 
{ 
    InnerControl innerControl = e.OriginalSource as InnerControl; 
    if (innerControl != null) 
    { 
     //do whatever 
    } 
    e.Handled = false; 
}