2016-08-12 11 views
0

WPFプログラムでListBoxを使用しているときに、私はかなり奇妙な問題が発生しています。 ListBoxSelectionModeSingleと定義しましたが、視覚的に複数のアイテムを選択できない場合でも、コード内で発生します。 SelectionModeSingleWithMultipleSelectedListBox SelectionMode単一の複数選択

回避策を実行しようとすると、私は機能UnselectAllを使用しようとしました、それはむしろstranglyまだ選択した項目を残す: UnselectAllStillSelected

そして最後の贈り物として、一度ここで見ることができるように 複数のアイテムが選択されています。選択されていないビジュアルをクリックしようとすると、コード内で選択されたアイテムがSystem.ArgumentExceptionでクラッシュします(実際には既に選択されています。完璧な複製物を追加するのですか?) ApplicationCrashOnListBoxClick

同じ問題があったListBox is selecting many items even in SelectionMode="Single"を調べましたが、私の場合は倍数のアイテムを視覚的に選択することはできず、アイテムは完璧に区別されています。

私は何かを持つ可能性混乱ListBox.Click上の任意のカスタム動作を持っていない

...

ListBox.ItemsSourceは、アイテムのリストにバインドされています。

はどこに来て私の問題であることにuseItemを呼び出すときに私が選択した項目のプロパティの値をデクリメントしますが、それはまだ同じ項目である(私はそれを再作成していない/それを削除し、再度追加してください)から? どうすれば修正できますか?

+0

がselectedItemsのは、あなたのXAMLで何かにバインドされているあなたの問題についてより明確な問題を示し、これらのリンクを確認できますか? – SpaceghostAli

+0

他の何かがそのリストに項目を追加している可能性はありますか? – SpaceghostAli

+0

私は 'useItem'関数で選択したアイテムを修正しています(私のアイテムは、1だけ減少するint chargeフィールドを持っています)。しかし、私はアイテムを変更するだけで、私は新しいアイテムを作成しません。 – Belterius

答えて

1

これで、最終的に私の問題の原因が見つかりました。

カスタムアイテムがあるので、私はEquals関数を再定義する必要がありました。 私はGetHashCode関数を再定義しなければなりませんでした。フィールドを含むいくつかのプロパティに基づいて減算しています...
フィールドを変更すると、同時に私はHashCodeとIを変更します。もうアイテムにアクセスできませんでした。

私のGetHashCode関数を不変フィールドに基く関数に変更すると、私の問題が解決しました。

1

SelectionModeSingleの場合は、documentationとしてSelectedItemsにバインドしないでください。ちょうどSelectedItemを使用してください。

+0

私はしません。 私のバインディングは以下のようになります: 'listItemSave = new BindingList (hero.backPack。 'listBoxBackPackItem.ItemsSource = this.listItemSave;' 私は決して 'SelectedItems'を使用しません。これは' Watch'でのみ表示され、コード内では 'SelectedItem'だけを使用します。 編集:ちょうど私が私のlistItems(私のItemsSource)がバインドされていたかどうかを尋ねていたと思って、前のコメントを勘違いしてしまった、私の間違い。 私の間違いを修正するために前のコメントを編集できるかどうか分かりません。 – Belterius

+0

よろしくお願いします。あなたはどのように問題を認識していますか(デバッグを除いて)? UIで選択された項目が複数表示されていますか? 'SelectedItem'は間違った項目ですか?あなたは 'Food'クラスのように見えますか? – aQsu

+0

SelectedItemはSelectedItemsの最初の項目です。つまり、別の項目を選択して操作しようとすると、最初の項目に対して引き続き操作が試されます。 そして、最初のアイテムを再度選択しようとすると(視覚的に選択されていないが、SelectedItemsに存在する)、アプリケーションは3番目のスクリーンショットでクラッシュします。 – Belterius

0

私はあなたの問題についての取得につきとして、あなたは

Link 1

Link 2

関連する問題