【发布时间】:2012-08-28 12:36:39
【问题描述】:
我有一个带有 DataContext 的列表框。当我选择一个项目时,我无法再次选择相同的项目。当对象很多时这不是问题,但有时,一个post-service返回我一个只有一个元素的列表,如果用户选择了元素,他想再次选择它,他将无法做到。任何人都知道如何解决这个问题
无论如何,谢谢!
【问题讨论】:
标签: c# windows-phone-7 listbox datacontext selectedindex
我有一个带有 DataContext 的列表框。当我选择一个项目时,我无法再次选择相同的项目。当对象很多时这不是问题,但有时,一个post-service返回我一个只有一个元素的列表,如果用户选择了元素,他想再次选择它,他将无法做到。任何人都知道如何解决这个问题
无论如何,谢谢!
【问题讨论】:
标签: c# windows-phone-7 listbox datacontext selectedindex
试试这个,它对我有用.. :)
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 属性并明确知道用户单击了哪个项目。
【讨论】:
如果您使用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;
}
【讨论】: