如何转换 System.Windows.Controls.SelectedItemCollection?(涉及IT技术)

78

我有一个方法:

private void DeletePuzzle(object param) 
{
}

param是从WPF ListViewSelectedItems属性中获取的System.Windows.Controls.SelectedItemCollection。但是,我似乎无法将它从对象转换为有用的内容。我无法创建System.Windows.Controls.SelectedItemCollection因为它的保护级别,而且param无法转换为IListICollectionIEnumerable

我该如何遍历param的项?


1
当您尝试将param转换为IEnumerable时,会出现什么错误?此外,您是否尝试将其转换为IEnumerable<Object>SelectedItemCollection继承自ObservableCollection<Object>,这意味着您应该可以将其转换为IEnumerableIEnumerable<Object>ICollectionICollection<Object>IListIList<Object>,没有任何问题。 - Adam Maras
3个回答

144

好的,搞定了。我一直试图将它转换成

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

我的代码告诉我它无法将SelectedItemCollection转换为IList...

事实上,这就是你需要做的。

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

2
在某些情况下,您还可以直接转换为所需的内容。如果您想要一个 ListArray,只需执行 var collection = items.Cast<PuzzleViewModel>().ToArray()var collection = items.Cast<PuzzleViewModel>().ToList() 即可。 - David Bentley

1

来自反射器:-

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

ListView中的选定项是IList类型,我希望能够查看调用方法。


1
调用方法来自RelayCommand(Josh Smith版本)。SelectedItemCollection 正确获取,但必须将其强制转换为IList而不是IList<T>,然后再进行转换。 - Matt Searles

-6

检查数据类型: System.Collections.Generic.IList<(Of <(ListViewDataItem>)>)


我认为那是Web Forms的事情,而不是WPF。 - itowlson
1
这甚至不是合法的C#代码,更别提答案是否提供任何有用的见解了。 - Peter Duniho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接