【发布时间】:2021-12-18 17:06:34
【问题描述】:
我有很多窗口,当我来自 App.xaml.cs 的静态属性发生变化时,我需要更新所有 ListView。
App.xaml.cs:
public partial class App : Application
{
private static ObservableCollection<tasks> _AllTasks;
public static ObservableCollection<tasks> AllTasks
{
get => _AllTasks;
set => _AllTasks = value;
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
AllTasks = new ObservableCollection<tasks>(Core.db.tasks.ToList());
}
}
添加新任务:
private void OnAddTaskExecuted(object p)
{
tasks tsk = new tasks()
{
taskname = "1",
description = "",
date = DateTime.Now,
empID = 2
};
Core.db.tasks.Add(tsk);
Core.db.SaveChanges();
App.AllTasks = new ObservableCollection<tasks>(Core.db.tasks.ToList());
}
如您所见,我正在添加一个新任务并重新定义静态字段。但我需要在不同窗口中的所有 ListView 来刷新。我假设我需要 AllTasks 集中的 PropertyChanged 事件,但我无法添加它,因为 AllTasks 是静态的。
【问题讨论】:
-
代替 App.AllTasks = new... 将项目添加到集合中:
foreach(var task in Core.db.tasks.ToList())) App.AllTasks.Add(task); -
如果需要在添加前清除:
App.AllTasks.Clear(); -
问题是当我添加一个新任务时。它添加了,但要看到它我需要重新打开窗口
-
那么问题出在其他地方......您不应该每次都创建一个新的可观察集合。您可以从中添加和删除项目。向我们展示您如何将此集合绑定到您的视图
-
好的,非常感谢