|
2009/09/09(Wed) 17:11:49 編集(投稿者) 2009/09/09(Wed) 17:07:55 編集(投稿者) <pre><pre>2009/09/09(Wed) 17:07:15 編集(投稿者)
■No41011 (Hongliang さん) に返信 > XAML で既にグループに使う PropertyGroupDescription 及び PropertyName は記述済みのようですが、 > なぜそれらをわざわざコードでさらに追加しているのでしょうか? > これでは二重のグルーピングになりかねません。 > また、CollectionViewSource.Source は直接 DataTable または DataView を使用します。 > グループ化は CollectionViewSource の GroupDescriptors に記述するようにします(記述済みですが)。 > 変更する場合も、このCollectionViewSource の GroupDescriptios に対して行います。 > というか、そもそも XAML で CollectionViewSource.Source は Binding で記述してるんですから、 > Window の DataContext に DataTable/DataView が設定されることが期待されているんではないでしょうか? まだ、WPF自体初心者なもので、よくよく考えてみるとそうですね。2重に設定していることになりますね。 XAMLのほうは削除し、ソースを以下のように修正しました。 とりあえず、グループヘッダー自体が表示されるようにはなりましたが、 グループ化された配下のデータ部分が表示されません。 どのようにすれば、配下のデータが表示させることができるのでしょうか? 引き続きご教授のほどよろしくお願いします。
==XAML== <ListBox x:Name="lbGroup" ItemsSource="{Binding}"> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Path=GROUP_NAME}"/> </DataTemplate> </ListBox.ItemTemplate> <ListBox.GroupStyle> <GroupStyle> <GroupStyle.ContainerStyle> <Style TargetType="{x:Type GroupItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type GroupItem}"> <Expander IsExpanded="True" BorderThickness="0,0,0,1"> <Expander.Header> <TextBlock Text="{Binding Path=Name}"/> </Expander.Header> </Expander> </ControlTemplate> </Setter.Value> </Setter> </Style> </GroupStyle.ContainerStyle> </GroupStyle> </ListBox.GroupStyle> </ListBox> ==Code== CollectionViewSource cvs = new CollectionViewSource(); cvs.Source = dt; PropertyGroupDescription groupDescription = new PropertyGroupDescription(); groupDescription.PropertyName = "GROUPCOLUMN"; cvs.GroupDescriptions.Add(groupDescription); this.lbGroup.DataContext = cvs;
</pre></pre>
|