ObservableCollectionにバインドされているこのListBoxがあります。リスト内の各オブジェクトは、ISelectableと呼ばれるインターフェイスを実装します
public interface ISelectable : INotifyPropertyChanged
{
event EventHandler IsSelected;
bool Selected { get; set; }
string DisplayText { get; }
}
どのオブジェクトがどのように選択されているかに関係なく、どのオブジェクトが選択されているかを追跡したいと思います。ユーザーはリストボックス内のオブジェクトの表現をクリックできますが、コードを介してオブジェクトが選択されている可能性もあります。ユーザーがリストボックスを介してオブジェクトを選択した場合、選択したアイテムをISelectableにキャストし、Selectedプロパティをtrueに設定します。
ISelectable selectable = (ISelectable)e.AddedItems[0];
selectable.Selected = true;
私の問題は、コードを使用してオブジェクトを選択すると、選択したアイテムを変更するためのListBoxを取得できないことです。DataTemplateを使用して、選択したオブジェクトを別の色で表示しています。これは、すべてが正しく表示されることを意味します。ただし、ListBoxには、ユーザーが最後にクリックしたオブジェクトがSelectedItemとして含まれています。つまり、リスト内の別のオブジェクトを最初に選択しないと、アイテムをクリックできません。
誰かがこれを解決する方法について何か考えを持っていますか?マウスイベントとキーボードイベントを処理するカスタムコードを作成することで、私が望むことを達成できると確信していますが、そうではありません。SelectedItemプロパティをコレクションに追加し、それをListBoxのSelectItemPropertyにバインドしようとしましたが、うまくいきませんでした。