0

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

<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?我想我需要对事件路由做一些事情,但我不确定是什么。

4

1 回答 1

1

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

private void handleInner(object o, RoutedEventArgs e)
{
    InnerControl innerControl = e.OriginalSource as InnerControl;
    if (innerControl  != null)
    {
        //do whatever
    }
    e.Handled = false;
}
于 2012-12-13T16:04:40.617 回答