c#WPF ListView显示任一数据分组,但不能同时显示两者

本文关键字:显示 但不能 ListView 任一 数据 c#WPF | 更新日期: 2023-09-27 18:21:39

我在Window上有一个绑定的ListView,我已经设置了XAML来进行分组,但当我尝试应用它时,我要么只得到数据,要么分组没有数据。XAML如下:

<ListView x:Name="lvNav" HorizontalAlignment="Left" Height="100" Margin="331,41,0,0" VerticalAlignment="Top" Width="166">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Customer" DisplayMemberBinding="{Binding serviceID}" />
            <GridViewColumn Header="S/N" DisplayMemberBinding="{Binding machineID}" />
        </GridView>
    </ListView.View>
    <ListView.GroupStyle>
         <GroupStyle>
             <GroupStyle.ContainerStyle>
                 <Style TargetType="{x:Type GroupItem}">
                     <Setter Property="Template">
                         <Setter.Value>
                             <ControlTemplate>
                                 <Expander IsExpanded="True">
                                     <Expander.Header>
                                         <StackPanel Orientation="Horizontal">
                                             <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" />
                                         </StackPanel>
                                     </Expander.Header>
                                 </Expander>
                             </ControlTemplate>
                         </Setter.Value>
                     </Setter>
                 </Style>
             </GroupStyle.ContainerStyle>
         </GroupStyle>
     </ListView.GroupStyle>
 </ListView>

加载数据的代码是:

System.Data.Entity.DbSet<srsr> srsrs = _fa.srsrs;
srsrs.Load();
lvNav.ItemsSource = srsrs.Local;
CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(lvNav.ItemsSource);
PropertyGroupDescription pgd = new PropertyGroupDescription("stateID");
view.GroupDescriptions.Add(pgd);

我想我错过了一些相对简单的东西,所以希望有人能给我指明正确的方向。

c#WPF ListView显示任一数据分组,但不能同时显示两者

如果您要使用MVVM方法,即没有代码隐藏,您可以使用以下方法:

<CollectionViewSource Source="{Binding PropertyOnYourVM}" x:Key="NameOfTheGrouping">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="PropertyToGroupOn"/>
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>  

然后你可以在ListView:上这样使用它

<ListView ItemsSource="{Binding Source={StaticResource NameOfTheGrouping}}">
<ListView.GroupStyle>
    <GroupStyle ContainerStyle="{StaticResource YourStyleNameHere}"/>
</ListView.GroupStyle>

但是,因为您没有使用MVVM,所以必须在代码背后进行操作
BTW:您在xaml中忘记了<ItemsPresenter />,它位于</Expander.Header></Expander> 之间

相关文章: