【问题标题】:Having trouble with deselecting items using SelectionChanged in a Listbox在列表框中使用 SelectionChanged 取消选择项目时遇到问题
【发布时间】:2013-04-05 09:51:53
【问题描述】:

我有两个相邻的 ListBox。在 XAML 文件中,它看起来像这样:

<ListBox Name="first_box" ItemsSource="{Binding Path=Firstlist}"  
    DisplayMemberPath="name" SelectionMode="Single" 
    SelectionChanged="Firstlist_SelectionChanged"/>
<ListBox Name="second_box" ItemsSource="{Binding Path=SecondList}"  
    DisplayMemberPath="name" SelectionMode="Single" 
    SelectionChanged="Secondlist_SelectionChanged"/>

我想要做的是,当一个 ListBox 中的一个项目被选中时,另一个 ListBox 应该失去它的选择。但我认为丢失该选择会再次触发SelectionChanged,从而删除另一个列表框中的选择,等等……

我该如何解决这个问题?

【问题讨论】:

    标签: c# wpf listbox selection


    【解决方案1】:

    一种解决方案是测试所选项目是否为空:

    Firstlist_SelectionChanged(object o, EventArgs e)
    {
        if(first_box.SelectedItem != null)
        {
            second_box.SelectedItem = null;
        }
    }
    
    Secondlist_SelectionChanged(object o, EventArgs e)
    {
        if(second_box.SelectedItem != null)
        {
            first_box.SelectedItem = null;
        }
    }
    

    初始情况:

    Box1 => Item1
    Box2 => null
    

    点击Box2中的项目

    Box1 => Item1
    Box2 => Item2 => Event fire
    

    Box2 是否为空?不,所以将 Box1 设置为 null

    Box1 => null => Event fire
    Box2 => Item2
    

    Box1 是否为空?是的,没有操作。
    最终情况:

    Box1 => null
    Box2 => Item2
    

    【讨论】:

    • 但是如果我单击第一个框中的一个项目,然后我单击第二个框中的一个项目,那么两个框现在不是都有一个选定的项目吗?因此,您的代码将无法正常工作。
    • 当您单击第二个框时,将触发 SelectionChanged 事件。由于第二个框的SelectedItem不为null,所以会将第一个框的选中项设置为null。对于第一个框会触发 SelectionChanged 事件,但由于它的选定项为空,因此什么也没有发生。
    • 我刚刚验证,它有效!感谢您的额外解释!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多