以下是我目前用于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;
}
答案 0 :(得分:1)
阅读代码有点困难,但据我所知,您正在创建一个全新的集合视图,其中包含一个全新的集合,而不是将新项目添加到旧集合中。
您应该将新项目添加到旧集合并调用CollectionView.Refresh()。