分组列表视图

时间:2012-01-20 05:22:25

标签: wpf listview

以下是我目前用于listview分组的代码。我能够对记录进行分组,但是当用户点击button(AddNewCluster)创建具有记录集的新组时,我无法与旧记录连接。使用新组和记录更新listview。但我需要向用户显示旧的和新添加的组和记录。

ListCollectionView collectionView;  

public Window1() 
{
    InitializeComponent();

    var clusters = new[] 
    {
        new Cluster { Name = "Front end" }, 
        new Cluster { Name = "Middle end" }, 
        new Cluster { Name = "Back end" }, 
    };    
    collectionView = new ListCollectionView(new[] 
    {
        new Server { Cluster = clusters[0], Name = "webshop1" }, 
        new Server { Cluster = clusters[0], Name = "webshop2" }, 
        new Server { Cluster = clusters[0], Name = "webshop3" }, 
        new Server { Cluster = clusters[0], Name = "webshop4" }, 
        new Server { Cluster = clusters[0], Name = "webshop5" }, 
        new Server { Cluster = clusters[0], Name = "webshop6" }, 
        new Server { Cluster = clusters[2], Name = "sql1" }, 
        new Server { Cluster = clusters[2], Name = "sql2" }, 
    });

    var groupDescription = new PropertyGroupDescription("Cluster.Name"); 
    // this foreach must at least add clusters that can't be  
    // derived from items - i.e. groups with no items in them  
    foreach (var cluster in clusters) 
    groupDescription.GroupNames.Add(cluster.Name);    
    collectionView.GroupDescriptions.Add(groupDescription);
    ServersList.ItemsSource = collectionView;    
    Clusters = groupDescription.GroupNames;
}
readonly ObservableCollection<object> Clusters; 

这是AddNewCluster_Click方法:

void AddNewCluster_Click(object sender, RoutedEventArgs e) 
{
    Clusters.Add(NewClusterName.Text);

    var clusters = new[] 
    {
        new Cluster { Name = NewClusterName.Text }, 
    };

    collectionView = new ListCollectionView(new[] 
    {
        new Server { Name = "new server data" }, 
    });

    var groupDescription = new PropertyGroupDescription("Cluster.Name");  

    // this foreach must at least add clusters that can't be 

    // derived from items - i.e. groups with no items in them 

    foreach (var cluster in clusters) 
        groupDescription.GroupNames.Add(cluster.Name);

    collectionView.GroupDescriptions.Add(groupDescription);

    ServersList.ItemsSource = collectionView;

}

1 个答案:

答案 0 :(得分:1)

阅读代码有点困难,但据我所知,您正在创建一个全新的集合视图,其中包含一个全新的集合,而不是将新项目添加到旧集合中。

您应该将新项目添加到旧集合并调用CollectionView.Refresh()。