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