WPF嵌套ListViews - 父ListView的selectedValue

时间:2012-12-13 15:55:18

标签: c# wpf xaml listview

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

<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时,返回的值始终为null。

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

1 个答案:

答案 0 :(得分:1)

好的,没想到你将数据绑定与手动填充混合在一起。我假设您的内部Listview使用select-event。你必须在树中泡一个,直到你点击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;
}