【发布时间】:2017-12-27 15:09:23
【问题描述】:
我想创建一个分为多个组的列表,以便可以隐藏任何组中的项目。
现在,每个组的项目都保存在一个单独的集合中,所有集合(总共 5 个)都保存在一个对象中。但是我可以修改它们的存储方式,如果它会使代码更简单。
【问题讨论】:
我想创建一个分为多个组的列表,以便可以隐藏任何组中的项目。
现在,每个组的项目都保存在一个单独的集合中,所有集合(总共 5 个)都保存在一个对象中。但是我可以修改它们的存储方式,如果它会使代码更简单。
【问题讨论】:
试试这个,用 ListBox 轻松将 ListBox 的 ItemTemplate 更改为 Expander。 例如: ScreenShot XAML:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowVM/>
</Window.DataContext>
<Grid>
<ListView ItemsSource="{Binding ItemsList}">
<ListView.ItemTemplate>
<DataTemplate>
<Expander Header="{Binding Name}" >
<ListView ItemsSource="{Binding Items}"/>
</Expander>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
视图模型:
public class MainWindowVM
{
public MainWindowVM()
{
ItemsList = new List<Group>();
var items = new List<Item>();
items.Add(new Item("Item1"));
items.Add(new Item("Item2"));
items.Add(new Item("Item3"));
//items.Add("Item4");
//items.Add("Item5");
ItemsList.Add(new Group()
{
Name = "List1",
Items = items
});
items.Add(new Item("Item4"));
ItemsList.Add(new Group()
{
Name = "List2",
Items = items
});
items.Add(new Item("Item5"));
ItemsList.Add(new Group()
{
Name = "List3",
Items = items
});
}
public List<Group> ItemsList { get; set; }
}
public class Group
{
public string Name { get; set; }
public List<Item> Items { get; set; }
public override string ToString()
{
return Name;
}
}
public class Item
{
public Item(string name)
{
Name = name;
}
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
【讨论】:
一旦您使用 WPF 框架,您就可以定义 ListBox.GroupStyle 以及内部项目的常规样式。然后将您的列表框绑定到 CollectionViewSource 类似的东西:
ICollectionView view = CollectionViewSource.GetDefaultView(*your-collection-here*);
view.GroupDescriptions.Add(new PropertyGroupDescription(*your-grouping-field-here*));
view.SortDescriptions.Add(new SortDescription((*your-grouping-field-here*, ListSortDirection.Ascending));
your-listbox-here.ItemsSource = view;
所有学分都在这里:http://www.c-sharpcorner.com/uploadfile/dpatra/grouping-and-sorting-in-listbox-in-wpf
要展开/折叠组,您可以添加一个保持当前状态(折叠或展开)的 bool 属性,并在您的样式中考虑到这一点(比如说,使其仅对展开的项目可见,更改“展开/折叠”雪佛龙图标等)
【讨论】: