2013-03-07 104 views
3

我在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評估的值會導致此行爲,而不僅僅是正確地更新目標/源,但是,我已經解決了該問題。如果任何人有什麼導致這種行爲的投入,我將不勝感激。感謝所有提出建議的人。

+0

嘗試將SelectedItem屬性設置爲null,並將新添加的項目指定爲選定項目。 – Abbas 2013-03-07 16:55:22

+0

我加了一行'listLeagues.SelectedItem = null;'但它也沒有任何影響。 – Harrison 2013-03-07 16:59:01

+1

您是否嘗試將xaml更改爲SelectedItem =「{Binding SelectedObject,Mode = OneWay}」 – yaens 2013-03-07 17:29:14

回答

0

好吧,首先您應該使用ObservableCollection進行綁定。

其次,您將實際UI SelectedIndex設置爲-1(這完全違背了綁定的目的)。您需要設置DataSource的索引。

試試這個,並可能發佈你的其他代碼。

+0

你能更詳細地解釋一下「設置數據源的索引」是什麼意思嗎?由於數據源是聯盟集合,我不明白你的建議。聯盟自定義集合不是可觀察集合。我正在教自己編程並選擇這一個來嘗試實現INotifyCollectionChanged接口。我不確定Observable集合是如何相關的,因爲我沒有問題通過基礎集合更新ListBox,但是在SelectedItem屬性方面存在問題。我現在確定其他代碼是相關的。 – Harrison 2013-03-07 17:35:31

0
listLeagues.SelectedIndex = -1; 
    listLeagues.SelectedItem = addedLeague; 
**listLeagues.UpdateLayOut();** 

我希望這會有所幫助。

1

我意識到這是舊的,但既然它顯示在我的搜索高,我想更新答案。我認爲你應該使用.ClearSelected()方法,MSDN info。這應該清除列表框C#或VBA(.net)中的任何選擇。

乾杯,

相關問題