3

我在 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。有人可以解释出了什么问题吗?

非常感谢你的帮助。

编辑

我已经SelectedItem="{Binding SelectedObject, Mode=TwoWay}"从 XAML 中删除了 ,发现一切正常[大部分时间]。我正在更新 ListBox 的基础源,当将影响 == 运算符评估的值更改为与原始值不同时,我注意到 SelectionChanged 事件不包括 RemovedItems 中的任何内容。我将尝试制作对象的深层副本并更改深层副本,看看是否能解决我的问题。

最后更新

我制作了联盟收藏中的 FantasyLeague 的深层副本。我将 FantasyLeauge 的成员绑定到一个可以更改的表单。当我将此深层副本作为允许更改 Leagues 集合而不是原始表单的来源时,没有任何问题。我不确定为什么更改与 == 和 .Equals 的评估相关的值会导致这种行为,而不仅仅是正确更新目标/源,但是,我已经解决了这个问题。如果有人对导致这种行为的原因有意见,我将不胜感激。感谢所有提出建议的人。

4

3 回答 3

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

I hope this will help.

于 2013-03-07T17:50:36.260 回答
0

好吧,首先你应该使用ObservableCollectionfor 绑定。

其次,您将实际 UI 设置SelectedIndex为 -1(这完全违背了绑定的目的)。您需要设置的索引DataSource

尝试一下,并可能发布您的其余代码。

于 2013-03-07T17:13:33.483 回答
0

我意识到这很旧,但由于它在我的搜索中显示很高,我想更新答案。我认为您应该使用 .ClearSelected() 方法,MSDN info。这应该清除列表框 C# 或 VBA (.net) 中的任何选择。

干杯,

于 2014-11-25T16:18:55.887 回答