0

私が見つけたすべての例と私の記事は、1 つのプロパティでアイテムをグループ化して表示することに関するものです。しかし、私が持っているのは、表示したい厳密なタイプのグループキーです。モデルとグループ化ロジックは次のとおりです。

アイテムインターフェース

public interface IItem {
    string Title { get; }
    string ToolTip { get; }
    object Icon { get; }
    Type GroupType { get; }
}

IItem次のような多くの実装があります。

public class Item : IItem {
    public string Title { get; private set; }
    public string ToolTip { get; private set; }
    public object Icon { get; private set; }

    // I have many implementation of IGroup which I will use them in GroupType properties.
    public Type GroupType { get { return SomeGroupTypeHere; } }
}

グループインターフェイスは次のとおりです。

public interface IGroup {
    string Name { get; }
    object Icon { get; }
}

また、多くの実装もあります。

ビューモデルでそれらを収集します(から助けを得てAutofac):

public class MyViewModel {

    private readonly IEnumerable<IGrouping<IGroup, IItem>> _items;

    public MyViewModel(IEnumerable<IGroup> groups, IEnumerable<IItem> items){
        _items = items.GroupBy(t => {
            var g = groups.First(u => u.GetType() == t.GroupType);
            return g;
        });
    }

    public IEnumerable<IGrouping<IGroup, IItem>> Items {
        get { return _items; }
    }
}

さて、問題は、このグループ化されたアイテムをItemsControl?で表示する方法です。

<ItemsControl ItemsSource="{Binding Items}" Margin="20 20 20 0">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate >
            <!-- here is my template that uses IItem properties, example: -->
            <Button Content="{Binding Title}"
                    ToolTip="{Binding ToolTip}"/>
        </DataTemplate >
    </ItemsControl.ItemTemplate>
</ItemsControl>

IGroupコードは、各グループの最初の項目のみを表示するだけで、グループ ヘッダー (プロパティを使用する) を表示し、各グループのすべての項目を表示する方法がわかりません。何か提案はありますか?どの記事やブログ投稿も非常に役立ちます。前もって感謝します。

4

1 に答える 1