2016-10-27 15 views
0

WPFのSelectionChangedListBox)のイベントで、の選択項目をListBoxItemにする方法はありますか?WPF ListBox.SelectedItems as ListBoxItem

今私がlistBox.SelectedItemsと呼ぶと、私のデータソースのフォーマットでアイテムのリストが得られます。例えば

私は私のListBoxを作成するとき、私はSelectedItemsを呼び出したときに私はCustomListBoxViewModelオブジェクトのリストを取得し、データソースとしてCustomListBoxViewModelにバインドします。

ありがとうございます!

EDIT:選択した答えに与えられた

コードは、私のユースケースのために完全に働きました。

一方、これはMVVMパターンに違反していると私は完全に理解しています。 xamlビューのコードビハインドで提供したコードを使用します。

私の元の質問の背後にある理由は、ListBoxItemsが無効になっているListBoxを実装する必要があるということでした。それらの項目は選択不可能でなければなりません。

添付ファイルを使用しようとしました。ListBoxItemsにあり、うまく機能しませんでした。この付属プロパティは、このpostによって大きく影響を受けました。問題は、無効なアイテムを直接選択したときに、添付されたプロパティが完全に機能していたことです。アイテムを選択できませんでした。そのアイテムはSelectedItemsコレクション内にありませんでした。しかし、Ctrl + Aを押してすべての項目を選択する場合は、無効な項目でもListBoxItemsがすべて選択され、SelectedItemsコレクションに見つかりました。

+0

いいえ、それは動作しません。 – Will

+0

@私はそれをやりたい理由で質問を更新しました。これは私が思った "最良の"方法です...これはもっと良い方法でしょうか? – EverydayLearner

答えて

4

あなたがこれをやっている理由が何であれ、それはおそらくあなたの人生の残りの部分を悲惨に後悔するMVVMの深刻な違反です。

しかし、perditionへの道のりの最初のステップは、常に簡単なものです。

var listBox = (ListBox)sender; 
var selectedListBoxItems = 
    listBox.SelectedItems.Cast<Object>() 
    .Select(item => (ListBoxItem)listBox.ItemContainerGenerator.ContainerFromItem(item)) 
    .ToList(); 

はちょうどそれすべてが涙で終了したときに私に泣いて来ることはありません。ここで

は方法です。

真剣に言えば、です。この種のことをWPFで行うにはいくつかの理由がありますが、WPFの新しいものよりはるかに一般的ではありません。 C#コードをデータ項目とのみ対話させて、スタイルやテンプレートを使用してXAMLのListBoxItemsを処理することで、どのような通常のケースでも最もよく処理されます。そのような考え方に慣れれば、非常に強力で、柔軟性があり、生産性が高く、メンテナンス性に優れています。コードビハインドは、他の合理的な手段がすべて失敗した奇妙なケースに対して行うことです。ドラッグアンドドロップなど。

+1

これは悪いことを完全に理解しています。私は私の質問の編集でこれを求めていた理由を追加しました。たぶん、これを行う良い方法があります。 – EverydayLearner

+1

@m。lachanceあなたの更新された質問を読んで、私の最初の反応は "ああ、男、ちょうどコードビハインドでそれをkludge"です。これは間違いなくあなたがコードビハインドでしばしばやることのようなものです。付加されたプロパティーのソリューションはより良いかもしれませんが、現実世界のスケジュールではパルテノンを構築することはできません。しかし、パルテノンを盗むことは別の問題です。私はそのcoderelief.netのポストを見て、そのコードが私のために働くかどうかを見ていきます。 –

関連する問題