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

时间:2014-09-12 03:50:05

标签: c# wpf xaml listview

我在一个窗口上有一个绑定的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);

我假设我在这里错过了一些相对简单的东西,所以希望有人可以指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

如果你使用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,你必须在后面的代码中执行它 顺便说一句:您在xaml中忘了<ItemsPresenter /></Expander.Header></Expander>