如何选择扩展组中的第一项(listview)

时间:2012-02-07 09:00:31

标签: c# wpf xaml listview expander

任何人都可以帮我解决这个问题(c#wpf):

我的ListView Style(每个群组)都有Expander {/ 1}}:

<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

1 个答案:

答案 0 :(得分:3)

是的,这是可能的。

包含Linq名称空间

 using System.Linq;

处理Expander的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 ,请使用附加属性行为将此功能包装到其中。

希望这有帮助,