正在从一个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也更改了,在上面的第二个代码输入中,这个问题从列表中删除了,但当我返回时,它并没有反映出来。我该如何更正?
基本上,我想把这个问题从列表中删除,这样用户就会知道这个问题已经完成了,他们就不能再选择了。我不想删除整个记录(从数据库中),只想从可选列表中删除
如果还有任何进一步的问题,请发表评论,我将相应地编辑问题
我认为您的问题是因为您正在调用…:
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");
}