我有一个带有DataContext的Listbox。当我选择一个项目时,我不能再选择相同的项目。当有很多对象时,这不是问题,但有时,后期服务会返回一个只包含一个元素的列表,如果用户选择了该元素,并且他想再次选择它,他将无法做到。任何人都知道如何解决这个问题
无论如何,谢谢!
答案 0 :(得分:2)
试试这个,它对我有用.. :))
public void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
ListBox listBox = sender as ListBox;
if (listBox != null && listBox.SelectedItem != null)
{
// do work
}
listBox.SelectedIndex = -1;
}
答案 1 :(得分:1)
正如Thierry所问,为什么您希望用户再次选择相同的项目?
如果只是这一个边缘情况,你有一个项目填充列表框,那么我会问,是默认选择的单个项目(或多个返回的第一个项目)?如果是这样,请尝试在列表框上将IsSynchronizedWithCurrentItem属性设置为False。没有看到代码,就很难提供更好的答案。
如果每次用户选择某个项目时都会运行代码,则无论它是否相同,您都可能遇到工作流程问题。您可能想知道是否可以重构此区域中的代码以更改工作流程。
如果您无法通过选择项目来更改工作流程,即使它是相同的项目,您可能需要使列表框中的每个项目成为按钮的控件模板更改为文本块的按钮。这将允许您绑定到Command属性,并具体知道用户单击了哪个项目。
答案 2 :(得分:1)
如果您使用ListBox
执行类似导航的操作,则您希望用户能够连续多次选择项目。这是你如何做到的:
“问题”只是ListBox
通知您更改,而选择相同的项目不是更改。因此,在方法结束时使其无效,并在开头检查您的无效状态。
public void OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var lb = (ListBox)sender;
if (lb.SelectedIndex == -1) return;
//your selection logic here
lb.SelectedIndex = -1;
}