【发布时间】:2010-12-19 20:40:35
【问题描述】:
我正在开发一个 wpf 应用程序,当使用组合框控件时,我将 ItemsSource 分配给它。因此,它显示了一个未选择项目的项目列表,现在用户可以选择他选择的项目。当用户做出选择时,他无法撤消该选择。我希望他能够获得没有选择任何项目的初始状态。我该怎么做?
【问题讨论】:
我正在开发一个 wpf 应用程序,当使用组合框控件时,我将 ItemsSource 分配给它。因此,它显示了一个未选择项目的项目列表,现在用户可以选择他选择的项目。当用户做出选择时,他无法撤消该选择。我希望他能够获得没有选择任何项目的初始状态。我该怎么做?
【问题讨论】:
在 Windows 窗体编程中也有多种类似的方法。您可以执行以下任一操作:
1) 将空白或 --None-- 记录添加到您的组合框数据源,即默认记录。
2)您可以监视按键事件并说使用 ESC 键将选定的索引重置回 -1。
3)如果您的组合框允许输入,您还可以允许他们清除文本并在文本字段为空白时保持离开,将 selectedindex 设置回 -1 以便它不会重置为所选值。
很多时候我的用户更喜欢选项 1,但那是我的用户。
这应该会给你一些选择。
【讨论】:
我每次都会在默认空白记录(索引为 -1)上重置回 --None- 记录。如果您正在处理“选择更改”或 ComboBox 上的某些事件,那么如果您将框指向 -1,则可能会出现空引用错误,这同样简单,因为您必须进行的唯一更改是设置选定的索引为(比如说)0 而不是 -1。
myComboBox.SelectedIndex = 0; //where 0 is a given default content entry.
【讨论】:
一般来说,我发现如果我需要增加 WPF 应用程序的复杂性,将其添加到数据源比将其添加到 XAML 更可靠。
在您的示例中,我将在我的数据源中解决此问题。如果我有:
public IEnumerable<Person> People { get {...} }
在我的数据源中,我会添加这个:
public IEnumerable<Person> PeopleWithNull
{
get
{
return (new List<Person> { null }).Concat(People);
}
}
【讨论】: