Ktouth Brand. on Web

け〜くんこと K.Ktouth のだらだらした日常と突発的に作るプログラムや読み物とかの雑多サイト



[2010年07月06日]

WPFのListBoxの複数選択の制御とか、マジで面倒

2010年07月06日 22:16更新 筆者:K.Ktouth

Microsoft Visual Studio 2010 Professional 乗換優待パッケージ(AA)

タイトルに関するコードで四苦八苦しています。
良くあるリストの並べ替え、ただそれだけなんですが……

  1. ListBoxに表示されたリストの一つ、ないし複数を選択してもらう
  2. 「1つ上」「8つ下」などのボタンで順番を変更
  3. 上記ボタンを連続でクリックすることも可能
  4. 上に移動したなら選択項目の一番上、下に移動ならその逆が常に表示されている

たったこれだけ。これで悩んでます^^;
実際の所、各項目を各々でやる方法は明確にわかっていて実装も成功しています。
問題はこれを一連の処理として実行すると例外が生成されるということ。
ListBox.ItemsSourceプロパティに設定したリストを操作した場合、そのリストの実装によってはごく一時的にリスト内部から項目が消える可能性があります。この消えた場合において、それ以降の処理を行う際に項目に対応するListBoxItemがまだ生成されていないという面倒な状況が発生するわけです。WPFのSelector要素は項目のコンテナオブジェクトを直接触れないため、複数選択させようとした場合、実行タイミングの齟齬が発生する……と言うことのようです。

多分、リストを更新した後、一端アプリケーション、もしくはウィンドウが保持するイベントキューを処理してしまえばいいと思うんですが。
……うう、メンドイ……

本日のリンク元
その他のリンク元
検索