Below is the code currently I am using for grouping in listview. I am able to group records, but when user clicks on the button(AddNewCluster) to create new group with set of records I am unable to concatenate with the old records. The listview gets updated with the new group and records. But I need to show the user both the old and newly added group and records.
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;
And here is the AddNewCluster_Click method:
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;
}
It’s a bit difficult to read the code, but as far as I can make out, you’re creating a new collection view, with a completely new collection, instead of adding the new item to the old collection.
You should add the new item to the old collection and call CollectionView.Refresh().