1

キーが文字列で要素がリストである辞書があります

elementのelementsを使用して、すべてのキーからグループを作成したいと思います。でも作り方がわからない

<Page.Resources>
    <!--
        Collection of grouped items displayed by this page, bound to a subset
        of the complete item list because items in groups cannot be virtualized
    -->
    <CollectionViewSource
        x:Name="groupedItemsViewSource"
        IsSourceGrouped="true"
        />

</Page.Resources>

<GridView ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}"
      IsSwipeEnabled="True">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding name}"
           Foreground="White" />
                </DataTemplate>
            </GridView.ItemTemplate>
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>
            <GridView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
<TextBlock Text="Test 123" Foreground="Gold" />
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                    <GroupStyle.Panel>
                        <ItemsPanelTemplate>
                            <VariableSizedWrapGrid Orientation="Vertical" />
                        </ItemsPanelTemplate>
                    </GroupStyle.Panel>
                </GroupStyle>
            </GridView.GroupStyle>
        </GridView>

ループで辞書を作成します

groups.Add(this.letters[i], items);

その後、私は

groupedItemsViewSource.Source = groups;

しかし、私は何も得られません。これを修正して、キーをグループタイトルとして、すべてのリストをこのグリッド内の要素のリストとして使用するにはどうすればよいですか?

// 編集

わかりました。辞書の代わりにリスト>を作成する方が良いことがわかりました。現在、3つのグループヘッダーを取得していますが(リストに3つのリストがあるため)、アイテムがありません。IMOこれは最初のものよりも良い方法です

//編集2アイテムが背景と前景が白だったのを見ませんでした。愚かな私:)しかし今、私は解決すべき最後の問題を抱えています。グループのタイトルを動的に設定するにはどうすればよいですか?

4

2 に答える 2

1

グループ化を有効にするために、実際にはカスタムクラスを作成する必要はありません。実際、LINQを使用してそれを行うことができます。

var result = from act in Activities group act by act.Project into grp orderby grp.Key select grp;

cvsActivities.Source=結果;

グループ化されたアイテムをGridViewに表示するには、CollectionViewSourceを使用する必要があります。グループをGridView.ItemsSourceとして設定するだけでは機能しません。GridView.ItemsSource = CollectionViewSourceを設定する必要があり、CollectionViewSourceはグループを指す必要があります。また、CollectionViewSource.IsSourceGrouped=trueを設定する必要がある場合もあります。

于 2012-08-27T21:19:48.913 に答える
0

ディクショナリは、バインディングを機能させる場合に必要なINotifyPropertyChangedまたはINotifyCollectionChangedを実装していません。

public class yourclass
{
    public string Key { get; set; }
    public int Value { get; set; }
}


ObservableCollection<yourclass> dict = new ObservableCollection<MyCustomClass>();
dict.Add(new yourclass{Key = "yourkey", Value = whatyouwant});
dict.Add(new yourclass{ Key = "yourkey2", Value = whatyouwant });
于 2012-08-26T11:42:06.497 に答える