Hi,
I use this behavior to manage multiple selection on radgridview (with selection mode = "extended" and with GridViewSelectColumn)
It works but when I try to initialize the selection with some items at the end of initialization I receive the OnSelectionChanged that remove all the elements selected but the first.
public class GridViewMultiSelect : Behavior<RadGridView>
{
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.DataContextChanged += OnDataContextChanged;
AssociatedObject.SelectedItems.CollectionChanged += OnSelectedItemsChanged;
AssociatedObject.SelectionChanging += OnSelectionChanged;
AssociatedObject.Items.CollectionChanged += OnItemsChanged;
}
private void OnSelectionChanged(object? sender, SelectionChangingEventArgs e)
{
}
private void OnItemsChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
}
private void Select(IEnumerable<NsMisuraViewWithType> misure)
{
foreach (var item in misure)
{
AssociatedObject.SelectedItems.Add(item);
}
}
private void OnDataContextChanged(object? sender, DependencyPropertyChangedEventArgs e)
{
if (AssociatedObject.DataContext is LoadedMeasurmentsVM viewModel)
{
viewModel.SelectAction = Select;
SetSelectMeasurements();
}
}
private void SetSelectMeasurements()
{
if (AssociatedObject.DataContext is LoadedMeasurmentsVM viewModel)
{
foreach (var item in AssociatedObject.SelectedItems)
{
if (viewModel.SelectedMeasurements.All(m => m.Misura.Id != ((NsMisuraViewWithType)item).Misura.Id))
{
viewModel.SelectedMeasurements.Add((NsMisuraViewWithType)item);
}
}
}
}
private void OnSelectedItemsChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
SetSelectMeasurements();
}
protected override void OnDetaching()
{
base.OnDetaching();
AssociatedObject.DataContextChanged -= OnDataContextChanged;
AssociatedObject.SelectedItems.CollectionChanged -= OnSelectedItemsChanged;
}
}
It seems that the property IsSynchronizedWithCurrentItem (default true) is related to the issue, if I set it to false I don't get the remove call.