我在XAML定義的列表框是如下:ListBox.SelectedIndex = -1不取消設置所選擇的項目
<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;
其中「聯賽」是一個自定義集合。我正在嘗試使用以下代碼更改代碼中的選定項目:
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中的任何內容。我將嘗試製作對象的深層副本並更改深層副本,然後查看是否可以解決我的問題。
最後更新
我做了FantasyLeague的深層副本那就是聯賽收藏。我將FantasyLeauge的成員綁定到可以更改的表單上。當我對錶格來源進行深層次的複製時,可以對聯賽集合進行更改,而不是原來的問題。我不知道爲什麼更改鏈接到==和.Equals評估的值會導致此行爲,而不僅僅是正確地更新目標/源,但是,我已經解決了該問題。如果任何人有什麼導致這種行爲的投入,我將不勝感激。感謝所有提出建議的人。
嘗試將SelectedItem屬性設置爲null,並將新添加的項目指定爲選定項目。 – Abbas 2013-03-07 16:55:22
我加了一行'listLeagues.SelectedItem = null;'但它也沒有任何影響。 – Harrison 2013-03-07 16:59:01
您是否嘗試將xaml更改爲SelectedItem =「{Binding SelectedObject,Mode = OneWay}」 – yaens 2013-03-07 17:29:14