正在从一个VM上的列表中删除项目,并在另一个VM中刷新该列表

本文关键字:列表 VM 删除项目 另一个 刷新 一个 | 更新日期: 2023-09-27 17:57:49

在我的项目中,使用MVVM和C#。我有两个ViewModels。这首先加载一个List并从中创建一个Observable Collection List

private ObservableCollection<Problems> _ProblemsList;
    public ObservableCollection<Problems> ProblemsList
    {
        get 
        {
            return _ProblemsList;
        }
        set
        {
            _ProblemsList = value;
            OnPropertyChanged(null);
        }
    }
    public List<Problems> Problems { get; set; }

一旦List被填充,Observable就会从中填充。然后我将Observable加载到一个gridview中。

一旦您在网格视图中选择了一个问题,就会进入一个新的视图。此视图允许您更改问题的数据。一个关键字段被更改,让我们称之为Validated(bool)。Validated从false变为true,单击done后,您应该返回到第一个带有列表的View。我的问题是,既然问题已经改变了,就应该把它从列表中删除。

因此,在我的第二个视图的VM代码中,我有:

protected void DeleteFromList()
    {
        long id = selectedProblem.ID;
        ProblemsList.ProblemsList.Remove(x => x.ID == id);
    }

第一个ProbemsList是上一个VM的实例ProbemsListingViewModel.cs我将实例发送到下一个VM,并填充和声明它们:

public InitiateWorkViewModel(CallProblems selectedProblem, ProblemsListingViewModel ProblemsList)

selectedProblem只是从第一个查看的列表中选择的问题

我的问题是,一旦我导航回来,可观察对象就不想刷新。我更改了数据,Validated也更改了,在上面的第二个代码输入中,这个问题从列表中删除了,但当我返回时,它并没有反映出来。我该如何更正?

基本上,我想把这个问题从列表中删除,这样用户就会知道这个问题已经完成了,他们就不能再选择了。我不想删除整个记录(从数据库中),只想从可选列表中删除

如果还有任何进一步的问题,请发表评论,我将相应地编辑问题

正在从一个VM上的列表中删除项目,并在另一个VM中刷新该列表

我认为您的问题是因为您正在调用…:

ProblemsList.ProblemsList.Remove(x => x.ID == id);

并且期望UI更新自身。

不幸的是,ObservableCollection.Remove方法不会引发INotifyPropertyChanged.PropertyChanged事件,因此UI不会更新。有几种方法可以解决这种情况,因为您所要做的就是在向集合中添加或删除项时引发INotifyPropertyChanged.PropertyChanged事件。

最简单的方法是将处理程序附加到视图模型中的ProblemsList.CollectionChanged事件。然后,每次从集合中添加或删除项目时,都可以引发INotifyPropertyChanged.PropertyChanged事件:

private void ProblemsList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    NotifyPropertyChanged("ProblemsList");
}