为什么我的列表框行为异常?它是追加而不是清除

Why is my listbox behaving unexpectedly? It is appending and not clearing

我没看到什么...我有一个从 ObservableCollection 更新的列表框,该集合被清除,然后向其中添加新数据。

列表框 mmisbehaves 它保留原始集合数据,然后将新数据附加到列表底部,尽管事实上它不在 ObservationalCollection 中。例如。如果它最初在列表框中有 4 个项目,如果我清除 ItemsSource shortTerm 并通过调试器,它确实清除了,然后更新为有 6 个新项目。然后列表框将显示原来的 4 并附加新的 6。它只是继续附加并且从不清除列表框!

这是让我头疼的重要一点:我使用水果编写了一个我想要实现的简化版本。它完美地工作。我不明白如何做同样的事情,我尝试重新创建项目,以防后台隐藏的东西搞砸了。

当他们做同样的事情时,为什么一个人工作而另一个人不行?这让我转弯。

尽管 ObservableCollection 被清除,它仍将数据附加到列表框。我不明白为什么会这样。它正在更新我的列表框,但没有清除以前的数据,我花了几个小时浏览绑定和 INotifyPropertyChanged 并且不断出现相同的结果。

我试图简化,所以我创建了一个非常基本的程序,只需将 3 个水果添加到列表框中,然后按一个按钮清空 "fruit" 并添加 3 个新水果。另一个按钮,清除它并放入原来的 3 个水果。所以在任何时候列表框中只会出现 3 个水果。 (例如苹果、香蕉、橙子或芒果、桃子、菠萝)。

如果我对我的程序执行相同的步骤,我得到的结果是按下按钮会清除 "fruitOC" ObservableCollection,但不会清除列表框并附加到它。

因此,如果 fruitOC 填充了 Apple、Banana、Orange,列表框也是如此,当我按下按钮时,它会清除 fruitOC 并添加 3 种新水果 Mango、Peach、Pineapple。但列表框显示 Apple、Banana、Orange、Mango、Peach、Pineapple。

我不明白这是怎么回事!我看不出它是如何作为有效代码的绑定的,仅引用设置列表框的 ItemsSource 属性 并且它有效。我头疼。我一定是错过了什么,但我一辈子都无法得到它是什么!

我试图从头开始重新创建 Visual Studio 解决方案,以防万一在后台隐藏了一些东西,对于我的程序,它只是不断追加!

// THIS CODE RESULTS IN THE LISTBOX APPENDING:
public ObservableCollection<string> shortTerm {get; set;}
public MainWindow()
{
    InitializeComponent();
    shortTerm = new ObservableCollection<string>();
    listBoxShortTerm.ItemSource = shortTerm;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    UpdateShortTerm();

}

private void UpdateShortTerm()
{
    shortTerm.Clear(); // this bit works and clears all data
    shortTerm.Add("insert string here");
}

// THIS CODE THE LISTBOX WORKS AS EXPECTED:
    public partial class MainWindow : Window
    {
        public ObservableCollection<string> fruit {get ; set;}
        public MainWindow()
        {
            InitializeComponent();
            fruit = new ObservableCollection<string>();
            AddInitialFruit();
            listBoxFruit.ItemsSource = fruit;
        }

        private void AddInitialFruit()
        {
            fruit.Clear();
            fruit.Add("Apple");
            fruit.Add("Banana");
            fruit.Add("Orange");
        }
        private void ChangeFruit()
        {
            fruit.Clear();
            AddNewFruit();
        }

        private void AddNewFruit()
        {
            fruit.Add("Mango");
            fruit.Add("Peach");
            fruit.Add("Pineapple");
        }

        private void ButtonChangeFruit_Click(object sender, RoutedEventArgs e)
        {
            ChangeFruit();
        }

        private void ButtonChangeFruit2_Click(object sender, RoutedEventArgs e)
        {
            AddInitialFruit();
        }
    }
}

我只希望列表框只显示我的 ObservableCollection shortTerm 的内容,而不是当前包含的内容以及之前包含的内容。

啊!我不敢相信我从来没有发现这一点,它已经困扰了我好几天了!问题出在后台的数据表上,而不是清除,因此从中获取的要放入列表框中的数据一直在追加,因为数据表一直在追加。