web-dev-qa-db-ja.com

System.Windows.Controls.SelectedItemCollectionをキャストする方法は?

私には方法があります:

private void DeletePuzzle(object param) 
{
}

paramはSystem.Windows.Controls.SelectedItemCollectionで、WPF ListViewSelectedItemsプロパティから取得しました。

どういうわけか、オブジェクトから有用なものにキャストできないようです。保護レベルが原因でSystem.Windows.Controls.SelectedItemCollectionを作成できません。また、paramがIListICollectionまたはIEnumerableにキャストされません。

Paramのアイテムをどのように反復できますか?

57
Matt Searles

そう、それを分類しました。私はそれを次のようにキャストしようとし続けました

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

SelectedItemCollectionからIListに変換できないと言われました...

これは実際に行う必要があることです。

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

リフレクターから:-

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

ListViewの選択された項目はIListであり、呼び出し元のメソッドを表示するIDのようなものです。

1
Aran Mulholland