3

オブジェクトのコレクションにバインドされたListViewがあります。ユーザーの選択に応じて、オブジェクトはプロパティごとにグループ化されます。

例、私は果物の基本的なコレクション(品種、量、起源)を持っています:

Banana, 10, Africa
Apple, 2, France
Pear, 30, France
Banana, 40, Africa

さまざまな果物ごとにグループ化されます:

Banana
    Banana, 10, Africa
    Banana, 40, Africa

Apple
    Apple, 2, France

Pear
    Pear, 30, France

オブジェクトとグループヘッダーごとに、選択用のチェックボックスをXAMLに追加します。グループヘッダーのチェックボックスで、グループ全体を選択したいと思います。上記の例で、ヘッダー「バナナ」をチェックすると、同じグループ内の2行下がチェックされます。

これは私のListViewのXAMLです:

<ListView Name="MyCollectionView" ItemsSource="{Binding}" SelectionMode="Multiple">
  <ListView.GroupStyle>
    <GroupStyle>
      <GroupStyle.HeaderTemplate>
        <DataTemplate>
          <StackPanel Orientation="Horizontal">
            <CheckBox Name="SelectAllGroup" />
            <TextBlock Text="{Binding Name}" Margin="10,0,0,0" />
          </StackPanel>
        </DataTemplate>
      </GroupStyle.HeaderTemplate>
    </GroupStyle>
  </ListView.GroupStyle>

  <ListView.View>
    <GridView>
      <GridViewColumn Width="Auto" Header="Sélection" >
       <GridViewColumn.CellTemplate>
         <DataTemplate>
           <CheckBox Margin="0" VerticalAlignment="Center" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}"/>
         </DataTemplate>
       </GridViewColumn.CellTemplate>
     </GridViewColumn>
     <GridViewColumn Width="Auto" Header="N°" DisplayMemberBinding="{Binding Path=Numero}"/>
     <GridViewColumn Width="Auto" Header="Nom" DisplayMemberBinding="{Binding Path=Nom}" />
     <GridViewColumn Width="Auto" Header="Responsable" DisplayMemberBinding="{Binding Path=Responsable}" />
     <GridViewColumn Width="Auto" Header="Détail" DisplayMemberBinding="{Binding Path=Detail}" />
     <GridViewColumn Width="Auto" Header="Calibre" DisplayMemberBinding="{Binding Path=Calibre}" />
    </GridView>
  </ListView.View>
</ListView>   

これどうやってするの ?

前もって感謝します。

4

1 に答える 1

0

ヘッダーのチェックボックスにコマンドを配置し、次にコマンドメソッドで次のようなコマンドを配置することで、これと非常によく似た処理を行いました。

private void UpdateSelectedFruitGroup()
{
    MyFruitCollection.Where(f => f.Variety == "Banana").ForEach(f => f.IsSelected = true);
}

ForEach を実行するには、この拡張機能を静的クラスに入れる必要があります。

    public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
    {
        if (enumerable == null)
            throw new ArgumentNullException("enumerable");

        if (action == null)
            throw new ArgumentNullException("action");

        foreach (var e in enumerable)
        {
            action(e);
        }
    }

基本的に、コレクション内の各アイテムを調べて、アクションを実行するだけです。この場合、IsSelected プロパティを設定します。

于 2012-09-20T13:06:06.477 に答える