2009-12-10 8 views
44

Ich habe eine Methode:Wie wird eine System.Windows.Controls.SelectedItemCollection umgewandelt?

private void DeletePuzzle(object param) 
{ 
} 

param ist ein System.Windows.Controls.SelectedItemCollection, dass ich aus einer WPF ListView ‚s SelectedItems Eigenschaft bekam.

Irgendwie kann ich nicht scheinen, es von einem Objekt zu etwas Nützlichem zu werfen. Ich kann kein System.Windows.Controls.SelectedItemCollection wegen seiner Schutzstufe erstellen, und Param wird nicht in IList, ICollection oder IEnumerable umgewandelt.

Wie kann ich Param-Elemente durchlaufen?

+0

Welchen Fehler bekommen Sie, wenn Sie versuchen, 'param' in' IEnumerable' zu ​​schreiben? Hast du es auch versucht, es auf 'IEnumerable ' zu werfen? 'SelectedItemCollection' erbt von' ObservableCollection ', was bedeutet, dass Sie kein Problem damit haben sollten, es in' IEnumerable', 'IEnumerable ', 'ICollection',' ICollection 'oder' IList', 'IList ' zu konvertieren. –

Antwort

79

Richtig, habe es sortiert. Ich hielt es wie der Versuch,

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

zu werfen Was mir gesagt, dass es nicht von SelectedItemCollection zu IList umwandeln könnte ...

Dies ist in der Tat, was Sie tun müssen.

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

Vielen Dank, es hat mir sehr geholfen –

+0

Sie können auch in bestimmten Situationen direkt auf das, was Sie benötigen, konvertieren. Wenn Sie eine 'List' oder ein' Array' wollen, können Sie einfach 'var collection = items.Cast (). ToArray()' oder 'var collection = items.Cast (). ToList() ' –

-1

Überprüfen Sie den Typ: System.Collections.Generic.IList<(Of <(ListViewDataItem>)>)

+0

Ich denke, das ist eine Web Forms Sache, nicht WPF. – itowlson

+0

Das ist nicht einmal legaler C# -Code, egal, die Antwort liefert überhaupt einen nützlichen Einblick. –

1

von Reflektor: -

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

Ausgewählte Elemente von Listview ein IList ist, wie id die Rufmethode zu sehen.

+1

Die aufrufende Methode stammt von einem RelayCommand (Josh Smiths-Version). Die SelectedItemCollection war in Ordnung, aber man muss sie in eine IList und nicht in eine IList umwandeln und sie dann umsetzen. –

Verwandte Themen