【发布时间】:2014-05-25 08:09:46
【问题描述】:
在我的项目中,使用 MVVM 和 C#。我有 2 个 ViewModel。这首先加载一个 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; }
一旦列表被填满,Observable 就会被填充。然后我将 observable 加载到 gridview 中。
一旦您在网格视图上选择了一个问题,您就会被带到一个新视图。此视图允许您更改问题的数据。一个关键字段发生了变化,我们称之为 Validated (bool)。 Validated 从 false 更改为 true,一旦单击完成,您应该返回到第一个视图,其中包含列表。 我的问题是,既然问题已经改变,应该从列表中删除。
所以在我的第二个 View 的 VM 代码中,我有:
protected void DeleteFromList()
{
long id = selectedProblem.ID;
ProblemsList.ProblemsList.Remove(x => x.ID == id);
}
第一个 ProblemsList 是前一个 VM 的实例 ProblemsListingViewModel.cs 我将实例发送到下一个虚拟机,它们被填充并声明:
public InitiateWorkViewModel(CallProblems selectedProblem, ProblemsListingViewModel ProblemsList)
selectedProblem 就是从第一个 View 的列表中选择的问题
我的问题是,一旦我导航回来,observable 就不想刷新。我更改了数据,Validated 已更改,问题已从上面第二个代码输入中的列表中删除,但当我返回时并没有反映出来。我该如何纠正?
基本上,我想从列表中删除该问题,以便用户知道该问题已经完成,他们无法再次选择它。我不想删除整个记录(从数据库中),只是从可选列表中
如果还有其他问题,请发表评论,我会相应地编辑问题
【问题讨论】:
-
看看 CollectionViewSource 和过滤,你可以应用过滤器隐藏已解决的问题,这里是链接:abhisheksur.com/2010/08/…
-
我是否正确地说您从
ObservableCollection填充List<>,然后使用List<>填充GridView?您是否使用 XAML 绑定来执行此操作? -
@AndrewStephens 走错路了。我使用列表从数据库中获取记录,然后从列表中填充 observable,然后从 observable 中填充 gridview。
-
@NicholasAysen,如果你重新阅读你的问题,看起来实际上是你弄错了......你说 第一个加载一个 Observable Collection 列表并创建一个普通 List从它和一旦Observable被填充,列表就会从它填充。然后我将列表加载到网格视图中。如果不正确,请在您的问题中更正。
-
@Sheridan 我已经编辑了这个问题。感谢您纠正我
标签: c# wpf list mvvm observablecollection