How to cast a System.Windows.Controls.SelectedItemCollection?

27,553

Solution 1

Right, got it sorted. I kept trying to cast it like

IList<PuzzleViewModel> collection = (IList<PuzzleViewModel>)param;

Which told me it couldn't convert from SelectedItemCollection to IList...

This is in fact what you need to do.

System.Collections.IList items = (System.Collections.IList)param;
var collection = items.Cast<PuzzleViewModel>();

Solution 2

from reflector : -

[Category("Appearance"), Bindable(true), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public IList SelectedItems
{
    get
    {
        return base.SelectedItemsImpl;
    }
}

Selected Items of ListView is an IList, id like to see the calling method.

Share:
27,553
Matt Searles
Author by

Matt Searles

https://www.linkedin.com/in/matt-searles/

Updated on July 05, 2022

Comments

  • Matt Searles
    Matt Searles almost 2 years

    I have a method:

    private void DeletePuzzle(object param) 
    {
    }
    

    param is a System.Windows.Controls.SelectedItemCollection, that I got from a WPF ListView's SelectedItems property.

    Somehow, I can't seem to cast it from an object to anything useful. I can't create a System.Windows.Controls.SelectedItemCollection because of its protection level, and param won't cast to IList, ICollection or IEnumerable.

    How can I iterate through param's items?

  • user6170001
    user6170001 over 14 years
    I think that's a Web Forms thing, not WPF.
  • Matt Searles
    Matt Searles over 14 years
    The calling method was from a RelayCommand (Josh Smiths version). The SelectedItemCollection was getting through ok, but one has to cast it to an IList, not an IList<T>, and then cast that.
  • Hodaya Shalom
    Hodaya Shalom about 11 years
    Thank you, it helped me a lot
  • Peter Duniho
    Peter Duniho about 9 years
    That's not even legal C# code never mind does the answer provide any useful insight at all.
  • David Bentley
    David Bentley over 6 years
    You can also under certain situations, convert directly to what you need. If you want a List or an Array you can just do var collection = items.Cast<PuzzleViewModel>().ToArray() or var collection = items.Cast<PuzzleViewModel>().ToList()