0

この XAML を含むユーザー コントロールがあります

<UserControl x:Class="QA.JobListControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:QA" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400">

   <UserControl.Resources>
      <CollectionViewSource x:Name="itemsSource" IsSourceGrouped="True" />
   </UserControl.Resources>

   <ListView x:Name="JobListView" Margin="-10,-10,0,0" Padding="120,0,0,60" IsSwipeEnabled="False" ItemsSource="{Binding Source=itemsSource}" SelectionChanged="JobListView_SelectionChanged" SelectionMode="Single">
      <ListView.GroupStyle>
         <GroupStyle>
            <GroupStyle.HeaderTemplate>
               <DataTemplate>
                  <Border HorizontalAlignment="Stretch">
                     <TextBlock Text='{Binding Status}' Margin="10" />
                  </Border>
               </DataTemplate>
            </GroupStyle.HeaderTemplate>
         </GroupStyle>
      </ListView.GroupStyle>
      <ListView.ItemTemplate>
         <DataTemplate>
            <StackPanel Margin="10">
               <TextBlock Text='{Binding TaskName}' />
               <TextBlock Text='{Binding DueDate}' />
            </StackPanel>
         </DataTemplate>
      </ListView.ItemTemplate>
   </ListView>
</UserControl>

コンテンツを設定するには、この C# コードを使用しています

itemsSource.Source = Tasks.OrderBy(Tsk => Tsk.DueDate).GroupBy(Tsk => Tsk.Status);

一部の要素が表示されていますが (ただし、それらは空の要素として表示されています)、すべてが表示されているわけではありません
。何が問題なのですか?

この C# コードを使用している場合、動作しています (ただし、グループ化されていません)。

JobListView.ItemsSource = Tasks.OrderBy(Tsk => Tsk.DueDate);

アップデート

StaticResource以下のようなものを追加した後、アイテムのない複数のグループが表示されるようになりました

ItemsSource="{Binding Source={StaticResource itemsSource}}"
4

1 に答える 1

2

したがって、GroupByメソッドの背後にある基本を誤解していると思います。GroupByは、他のほとんどのLinq拡張機能とは対照的に、オブジェクトの単純なリストを返さず、代わりにIGroupingのリストを返します。IGroupingインターフェースは、GroupByラムダで渡したグループ化識別子の値を保持するKeyプロパティを公開します。

したがって、リストにグループ名を表示するには、グループヘッダーテンプレートをステータスではなくキーにバインドする必要があります。

<TextBlock Text='{Binding Key}' Margin="10" />

また、CollectionViewSourceをリソースとして参照する場合は、後でXAMLでStaticResourceとして参照するためのリソースキーを定義する必要があります。

<CollectionViewSource x:Name="itemsSource" x:Key="groupedTasks" IsSourceGrouped="True" />

そしてリストビューで。

<ListView x:Name="JobListView" ItemsSource="{Binding Source={StaticResource groupedTasks}}">

このようにして、私はあなたの例を期待どおりに機能させました。

追加の読み物として、Sergei Barskiyによるこの記事を読むことを強くお勧めします。この記事は、XAMLリストでグループ化を使用する方法を示し、GroupedDataクラスも提供します。これは、デフォルトのIGroupingオブジェクトよりもはるかに優れており、データを公開して使用することができます。 UI。

于 2012-12-27T18:20:29.457 に答える