OK、これは重複した質問である必要がありますが、答えが見つかりません。コレクションにデータバインドされたリストボックスがあります。デフォルトでは、Items[0]が選択されています。ListBoxItemをクリックするたびにSelectionChangedイベントが発生するようにするには、これを防ぐにはどうすればよいですか?
編集:SelectedIndex = -1ルートを既に却下しましたが、再試行しました:リストボックスのコンストラクターで(またはXAMLの属性として)SelectedIndexを-1に設定しても機能しません。初期化後にリストボックスにデータが入力され、selectedindexは結局0になるようです。SelectedItemをnullに設定するのと同じ話です。
私はこれを試しました:
<ListBox ItemsSource="{Binding Value}"
SelectionChanged="ListBox_SelectionChanged"
IsSynchronizedWithCurrentItem="True"
Loaded="ListBox_Loaded">
</ListBox>
と:
private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if(e.AddedItems.Count==0)return;//Prevents stackoverflow! ;-)
((ListBox)e.OriginalSource).SelectedItem=null;
}
private void ListBox_Loaded(object sender, RoutedEventArgs e)
{
((ListBox) sender).SelectedItem = null;
}
これは機能しますが、リストボックスに表示される項目の上に空白行が挿入されます。これは非常に醜いです。私の特定のケースでは、IsSynchronizedWithCurrentItem属性を削除することで問題を解決できます。
しかし、これが受け入れられない多くのシナリオを考えることができます。
上記のステートメントは意味がありません。マスター/詳細バインディングを使用してIsSynchronizedWithCurrentItemをtrueに設定するか、そうでないかのどちらかです。マスター/詳細バインディングを使用して、リストボックスに現在選択されているアイテムがないことはほとんどありません。