【问题标题】:Default Text in the Drop Down下拉菜单中的默认文本
【发布时间】:2010-12-19 20:40:35
【问题描述】:

我正在开发一个 wpf 应用程序,当使用组合框控件时,我将 ItemsSource 分配给它。因此,它显示了一个未选择项目的项目列表,现在用户可以选择他选择的项目。当用户做出选择时,他无法撤消该选择。我希望他能够获得没有选择任何项目的初始状态。我该怎么做?

【问题讨论】:

    标签: wpf combobox unselect


    【解决方案1】:

    在 Windows 窗体编程中也有多种类似的方法。您可以执行以下任一操作:

    1) 将空白或 --None-- 记录添加到您的组合框数据源,即默认记录。 2)您可以监视按键事件并说使用 ESC 键将选定的索引重置回 -1。
    3)如果您的组合框允许输入,您还可以允许他们清除文本并在文本字段为空白时保持离开,将 selectedindex 设置回 -1 以便它不会重置为所选值。

    很多时候我的用户更喜欢选项 1,但那是我的用户。

    这应该会给你一些选择。

    【讨论】:

    • 我之前使用过第一种方式,但在这种情况下,假设我的 ComboBox 有一个 List of People 类型分配给它的 ItemsSource,并将 DisplayMemberPath 设置为 People 类型的 Name 属性。然后我需要在列表中添加一个名称=“无选择”的人员对象。有没有办法让我直接在 ComboBox 以及我的其他 People 对象中拥有名为“No Select”的项目。
    • 我确实找到了这个链接blueedge.nl/weblog/post/Nullable-ComboBox-in-Silverlight.aspx,它可以满足您的要求。可能有点多,但它与数字 1 做同样的事情,而无需手动添加空白记录。该解决方案看起来应该很有效。大声笑,我什至可以根据自己的需要调整它。除此之外,我必须同意网络上很多人的观点,除了添加一个虚拟记录来实现你想要的东西之外,没有太多的东西。因此,除此之外,我建议使用其中一种按键/文本监控解决方案。
    【解决方案2】:

    我每次都会在默认空白记录(索引为 -1)上重置回 --None- 记录。如果您正在处理“选择更改”或 ComboBox 上的某些事件,那么如果您将框指向 -1,则可能会出现空引用错误,这同样简单,因为您必须进行的唯一更改是设置选定的索引为(比如说)0 而不是 -1。

    myComboBox.SelectedIndex = 0; //where 0 is a given default content entry.
    

    【讨论】:

      【解决方案3】:

      一般来说,我发现如果我需要增加 WPF 应用程序的复杂性,将其添加到数据源比将其添加到 XAML 更可靠。

      在您的示例中,我将在我的数据源中解决此问题。如果我有:

      public IEnumerable<Person> People { get {...} }
      

      在我的数据源中,我会添加这个:

      public IEnumerable<Person> PeopleWithNull
      {
         get
         {
            return (new List<Person> { null }).Concat(People);
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        相关资源
        最近更新 更多