2009-12-10 11 views
44

que tienen un método:Cómo lanzar un System.Windows.Controls.SelectedItemCollection?

private void DeletePuzzle(object param) 
{ 
} 

parámetro es un System.Windows.Controls.SelectedItemCollection, que obtuve de la propiedad SelectedItems un WPF ListView 's.

De alguna manera, parece que no puedo convertirlo de un objeto a nada útil. No puedo crear un System.Windows.Controls.SelectedItemCollection debido a su nivel de protección, y param no se lanzará a IList, ICollection o IEnumerable.

¿Cómo puedo iterar a través de los elementos de param?

+0

¿Qué error obtienes cuando intentas convertir 'param' a' IEnumerable'? Además, ¿ha intentado convertirlo a 'IEnumerable '? 'SelectedItemCollection' hereda de' ObservableCollection 'lo que significa que no debería tener problemas para convertirlo en' IEnumerable', 'IEnumerable ', 'ICollection',' ICollection ', o' IList', 'IList '. –

Respuesta

79

Bien, lo tengo ordenado. Seguí tratando de lanzarlo como

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

Lo que me dijo que no podía convertir de SelectedItemCollection a IList ...

Esto es de hecho lo que tiene que hacer.

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

Gracias, me ayudó mucho –

+0

También puede en ciertas situaciones, convertir directamente a lo que necesita. Si quieres una 'Lista' o una' Matriz', puedes hacer 'var collection = items.Cast (). ToArray()' o 'var collection = items.Cast (). ToList() ' –

-1

comprobar el tipo: System.Collections.Generic.IList<(Of <(ListViewDataItem>)>)

+0

Creo que eso es una cosa de Web Forms, no de WPF. – itowlson

+0

Eso ni siquiera es un código legal de C#, no importa, la respuesta brinda algún conocimiento útil. –

1

del reflector: -

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

elementos seleccionados de ListView es un IList, identificación como para ver el método de llamada.

+1

El método de llamada era de un RelayCommand (versión de Josh Smiths). El SelectedItemCollection estaba pasando bien, pero uno tiene que convertirlo en un IList, no en un IList , y luego lanzarlo. –

Cuestiones relacionadas