I am currently binding an observable list to the selected items in my ListView by using an attached property as follows:
public class DisplaySelectedItems
{
public static void SetSelectedItems(DependencyObject element, object value)
{
if (element is SfDataGrid || element is ListView)
element.SetValue(SelectedItemsProperty, value);
else
throw new NotSupportedException("This property can be used only with SfDataGrid or ListView");
}
public static object GetSelectedItems(DependencyObject element)
{
return (object)element.GetValue(SelectedItemsProperty);
}
public static readonly DependencyProperty SelectedItemsProperty =
DependencyProperty.RegisterAttached("SelectedItems", typeof(ObservableCollection<Object>), typeof(DisplaySelectedItems), new PropertyMetadata(new ObservableCollection<Object>(), OnSelectedItemsChanged));
private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs args)
{
if (d is SfDataGrid)
{
var sfDataGrid = d as SfDataGrid;
if (sfDataGrid == null)
return;
//SfDataGridHelper.SelectedItems property updated based on SfDataGrid.SelectedItems Collectionchanged event.
sfDataGrid.SelectedItems.CollectionChanged += (sender, e) =>
{
DisplaySelectedItems.SetSelectedItems(sfDataGrid, sfDataGrid.SelectedItems);
};
}
if (d is ListView)
{
var listView = d as ListView;
if (listView == null)
return;
//ListView Selectionchanged event
listView.SelectionChanged += (sender, e) =>
{
DisplaySelectedItems.SetSelectedItems(listView, listView.SelectedItems);
};
}
}
}
The issue with this method is that it will not work unless the observable collection I have binded to the selectedItems property consists of object types (ObservableCollection). How do I modify this code to allow it to work for any type of object type in my ListView?