2009-12-10 49 views
44

我有一个方法:如何投射System.Windows.Controls.SelectedItemCollection?

private void DeletePuzzle(object param) 
{ 
} 

参数是一个System.Windows.Controls.SelectedItemCollection,使我从一个WPF ListViewSelectedItems财产得到。

不知何故,我似乎无法将它从一个对象转换为任何有用的东西。由于其保护等级,我无法创建System.Windows.Controls.SelectedItemCollection,并且参数不会转换为IListICollectionIEnumerable

如何迭代param的项目?

+0

当您尝试将'param'强制转换为'IEnumerable'时会出现什么错误?另外,你有没有尝试将其转换为'IEnumerable '? 'SelectedItemCollection'继承自'ObservableCollection ',这意味着你不应该将它转换为'IEnumerable','IEnumerable ','ICollection','ICollection '或IList','IList '。 – 2009-12-10 00:50:33

回答

79

对,把它排序。我一直试图投它像

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

哪位告诉我,它无法从SelectedItemCollection转换为IList的...

这其实是你需要做什么。

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

谢谢,它帮了我很多 – 2013-02-13 11:33:30

+0

你也可以在某些情况下直接转换成你需要的东西。如果你想要一个'List'或者一个'Array',你可以做'var collection = items.Cast ()。ToArray()'或'var collection = items.Cast ' – 2017-12-02 18:30:59

-1

查看类型: System.Collections.Generic.IList<(Of <(ListViewDataItem>)>)

+0

我认为这是一个Web窗体的事情,而不是WPF。 – itowlson 2009-12-10 00:54:10

+0

这甚至不是合法的C#代码,不用担心答案会提供任何有用的见解。 – 2015-03-15 03:57:08

1

从反射镜: -

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

的ListView所选项目是一个IList,ID喜欢看调用方法。

+1

调用方法来自RelayCommand(Josh Smiths版本)。 SelectedItemCollection正在通过,但必须将其投射到IList,而不是IList ,然后进行投射。 – 2009-12-10 03:30:07