【问题标题】:How to cast a System.Windows.Controls.SelectedItemCollection?如何投射 System.Windows.Controls.SelectedItemCollection?
【发布时间】:2010-12-25 01:52:28
【问题描述】:

我有一个方法:

private void DeletePuzzle(object param) 
{
}

param 是一个 System.Windows.Controls.SelectedItemCollection,我从 WPF ListViewSelectedItems 属性中获得。

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

如何遍历 param 的项目?

【问题讨论】:

  • 当您尝试将param 转换为IEnumerable 时遇到什么错误?另外,您是否尝试将其转换为IEnumerable<Object>SelectedItemCollection 继承自 ObservableCollection<Object>,这意味着将其转换为 IEnumerableIEnumerable<Object>ICollectionICollection<Object>IListIList<Object> 应该没有问题。

标签: wpf selecteditem


【解决方案1】:

好的,整理好了。我一直试图把它像

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

这告诉我它无法从 SelectedItemCollection 转换为 IList...

这实际上是你需要做的。

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

【讨论】:

  • 谢谢,对我帮助很大
  • 你也可以在某些情况下,直接转换成你需要的。如果您想要ListArray,您可以使用var collection = items.Cast&lt;PuzzleViewModel&gt;().ToArray()var collection = items.Cast&lt;PuzzleViewModel&gt;().ToList()
【解决方案2】:

来自反射器:-

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

ListView的Selected Items是一个IList,id喜欢看调用方法。

【讨论】:

  • 调用方法来自 RelayCommand(Josh Smiths 版本)。 SelectedItemCollection 顺利通过,但必须将其转换为 IList,而不是 IList,然后再转换。
【解决方案3】:

检查类型: System.Collections.Generic.IList&lt;(Of &lt;(ListViewDataItem&gt;)&gt;)

【讨论】:

  • 我认为这是 Web 窗体的问题,而不是 WPF。
  • 这甚至不是合法的 C# 代码,不管答案是否提供任何有用的见解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
相关资源
最近更新 更多