2017-12-27 318 views
0

Example如何在WPF中的分组列表中显示多个集?

我想创建一个分成若干组,使得从任何一组物品都可以隐藏列表。

现在,每个组的项目在一个单独的收集和所有集合(共5个)的单个对象举行举行。但是如果它能使代码更简单,我可以修改它们的存储方式。

回答

0

试试这个,列表框的易变化的ItemTemplate与列表框扩展器。 例如: 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; 
    } 
} 
+0

我怎么会在运行时更改列表里面的帐户? – Jecke

+0

您需要实现接口INotifyPropertyChanged的 –

0

只要你与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

要展开/折叠组,您可以添加,保持当前状态的布尔属性(折叠或展开),并采取这为您的样式(让的说,使之可见为展开的项目只,变“展开/折叠” V形图标等)

+0

是否可以使用“扩展器”,类似АндрійПетрук的答案,而不是布尔财产?如果是这样 - 如何? – Jecke

+0

@Jecke,你必须添加一个按钮“组风格”。该按钮的用途是切换视图模型中的布尔属性。然后,组风格可以自动刷新其按钮的图片(来自“向下箭头”到“向上箭头”)和项目风格可以在整个(像能见度更改其可见= {绑定路径=扩大,转换器= {StaticResource的BoolToVisibilityConverter}} ) –

相关问题