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