如何选择展开组(列表视图)中的第一个项目

本文关键字:视图 第一个 项目 列表 何选择 选择 | 更新日期: 2023-09-27 18:22:44

有人能帮我解决这个问题吗(c#wpf):

我的Expander(每组)有一个ListView和这个Style

<ListView.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Path=Name}" />
                </StackPanel>
            </DataTemplate>
        </GroupStyle.HeaderTemplate>
        <GroupStyle.ContainerStyle>
            <Style TargetType="{x:Type GroupItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GroupItem}">
                            <Expander IsExpanded="False">
                                <Expander.Header>
                                    <StackPanel Orientation="Horizontal">
                                        <TextBlock Text="{Binding Path=Name}" />
                                    </StackPanel>
                                </Expander.Header>
                                <ItemsPresenter />
                            </Expander>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </GroupStyle.ContainerStyle>
    </GroupStyle>
</ListView.GroupStyle>

当用户展开Expander时,我想选择展开组中的第一个项目。

我添加了这样的组(CustomerOrderList=ListView):

CustomerOrderList.ItemsSource = OrderDetails.DefaultView;
CollectionView cv = (CollectionView)CollectionViewSource.GetDefaultView(CustomerOrderList.ItemsSource);
PropertyGroupDescription pgd = new PropertyGroupDescription("OrderInfo");
cv.GroupDescriptions.Add(pgd);

这可能吗?

谢谢,Senne

如何选择展开组(列表视图)中的第一个项目

是的,这是可能的。

包括Linq命名空间

 using System.Linq;

处理扩展器的Expanded事件

  <Expander Expanded="GroupExpander_Expanded" IsExpanded="False" ... /> 

代码隐藏。。。

   private void GroupExpander_Expanded(object sender, RoutedEventArgs e)
   {
        var expander = sender as Expander;
        //Extract the group 
        var groupItem = expander.DataContext as CollectionViewGroup;
        //Set the first item from the group to ListBox's Selected Item property.
        CustomerOrderList.SelectedItem = groupItem.Items.First();
   }

如果您使用MVVM,则使用附加属性行为将此功能封装到其中。

希望这有帮助,