我发现的每个示例和我的文章都是关于按一个属性对项目进行分组并显示它。但是我拥有的是一个强类型的组键,我想显示它。这是模型和分组逻辑:
物品界面
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
属性)并显示每个组中的所有项目。请问有什么建议吗?任何文章或博客文章都会非常有用。提前致谢。