【问题标题】:WPF - combobox items is getting duplicatedWPF - 组合框项目被重复
【发布时间】:2017-09-02 18:08:41
【问题描述】:

我正在创建 WPF 应用程序,在我的设置面板中,我有几个标签、文本框、组合框和两个按钮(保存)和(取消)。

Xaml

<ComboBox x:Name="myCombobox" Grid.Column="1" Margin="18,372,4,0" VerticalAlignment="Top" Height="26" SelectionChanged="MyCombobox_SelectionChanged" />

我已经在我的组合框中添加了项目:

myCombobox.Items.Add("Test1");
myCombobox.Items.Add("Test2");
myCombobox.Items.Add("Test3");
foreach (var item in myCombobox.Items)
    if (item.Equals(Properties.Settings.Default.MyCombobox))
        myCombobox.SelectedItem = item;

并添加了 SelectionChanged 事件。看起来是这样的:

private void MyCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (myCombobox.SelectedItem.ToString().Equals("Test1"))
    {
        testGrid.Visibility = Visibility.Visible;
    }
    else if (myCombobox.SelectedItem.ToString().Equals("Test2") || myCombobox.SelectedItem.ToString().Equals("Test3"))
    {
        testGrid.Visibility = Visibility.Hidden;
    }
}

当我单击取消按钮并重新启动我的设置面板时,我的组合框的项目被复制。 (两次相同的值)。

我试图通过添加取消按钮单击事件来防止这种情况

myCombobox.Items.Clear();

但此时存在另一个问题(myCombobox.SelectedItem 为空),我收到此错误:

“System.NullReferenceException”类型的异常发生在 IdentificationStation.exe,但未在用户代码中处理

如何防止组合框项目重复?或者我应该这样做MyCombobox_SelectionChangedotherwice,有什么帮助吗?

【问题讨论】:

  • myCombobox.Items.Clear();将此添加到 onchange 事件中。
  • 如何填充组合?应该添加与问题相关的代码。
  • 该应用程序肯定会在例程中两次调用“myComboBox.Items.Add(...)”。这在哪里/如何称呼?你能显示有这个调用的方法吗?
  • 请添加定义组合框的xaml。

标签: c# wpf combobox


【解决方案1】:

使用此检查停止添加重复项:

if(!myComboBox.Items.Contains("item"))
{
    myComboBox.Items.Add("item");
}

【讨论】:

  • 如果组合框是动态更新的,您只想进行这些类型的验证。对于像上面这样的静态更新,编码人员应该能够看到调用堆栈并修复例程,使其不会被调用两次。
【解决方案2】:

你就不能避免

'System.NullReferenceException'

通过测试myCombobox.SelectedItemMyCombobox_SelectionChanged 上是否为空?

private void MyCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (myCombobox.SelectedItem != null)
        if (myCombobox.SelectedItem.ToString().Equals("Test1"))
        {
            testGrid.Visibility = Visibility.Visible;
        }
        else if (myCombobox.SelectedItem.ToString().Equals("Test2") || myCombobox.SelectedItem.ToString().Equals("Test3"))
        {
            testGrid.Visibility = Visibility.Hidden;
        }
    }
}

我不认为那样做是不好的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多