XAMLで定義されたリストボックスは次のとおりです。
<ListBox x:Name="listLeagues" DisplayMemberPath="LeagueName"
SelectionChanged="listLeagues_SelectionChanged"
SelectedItem="{Binding SelectedObject, Mode=TwoWay}"
SelectionMode="Single"
BorderBrush="{StaticResource noBrush}" Background="{StaticResource noBrush}"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
</ListBox>
コードでは、DataContext を次のように設定します。 listLeagues.ItemsSource = Leagues;
「Leagues」はカスタム コレクションです。次のコードを使用して、選択したアイテムをコードで変更しようとしています:
private void addButton_Click(object sender, MouseButtonEventArgs e)
{
FantasyLeague addedLeague = new FantasyLeague();
Random rnd = new Random();
addedLeague.LeagueName = "New Leauge " + rnd.Next(100).ToString();
Leagues.Add(addedLeague);
listLeagues.SelectedIndex = -1;
listLeagues.SelectedItem = addedLeague;
LeagueDetailsClickHelper();
}
私のリストボックスには SelectionMode = Single があります。この行listLeagues.SelectedIndex = -1;
は影響を与えず、SelectedItem を新しい値に変更すると、モードがシングルであっても両方の項目が SelectedItems になります。誰かが何がうまくいかないのか説明できますか?
どうもありがとうございました。
編集
XAML からを削除したSelectedItem="{Binding SelectedObject, Mode=TwoWay}"
ところ、[ほとんどの場合] 正常に動作していることがわかりました。ListBox の基になるソースを更新しています。== 演算子の評価に影響する値を元の値とは異なる値に変更すると、SelectionChanged イベントの RemovedItems に何も含まれていないことに気付きました。オブジェクトのディープ コピーを作成し、ディープ コピーを変更して、問題が解決するかどうかを確認します。
最終更新
Leagues コレクションにある FantasyLeague のディープ コピーを作成しました。FantasyLeauge のメンバーは、変更可能なフォームにバインドされています。これのディープ コピーをフォームのソースとして作成したところ、オリジナルではなくリーグ コレクションに変更を加えることができましたが、問題はありませんでした。== および .Equals の評価にリンクされている値を変更すると、ターゲット/ソースが正しく更新されずにこの動作が発生する理由はわかりませんが、問題を回避しました。この動作の原因について誰かが意見を持っていれば、私はそれを感謝します. 提案をしてくれたみんなに感謝します。