如何通知所有窗口静态属性已更改?
Posted
技术标签:
【中文标题】如何通知所有窗口静态属性已更改?【英文标题】:How to notify all windows that static property has changed? 【发布时间】: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();
问题是当我添加一个新任务时。它添加了,但要看到它我需要重新打开窗口
那么问题出在其他地方......您不应该每次都创建一个新的可观察集合。您可以从中添加和删除项目。向我们展示您如何将此集合绑定到您的视图
好的,非常感谢
【参考方案1】:
问题是我不需要每次都创建一个新的 ObservableCollection 实例来刷新它。
我改了private void OnAddTaskExecuted(object p)
来自App.AllTasks = new ...
到App.AllTasks.Add(tsk);
并且成功了。
非常感谢@Nawed Nabi Zada
【讨论】:
以上是关于如何通知所有窗口静态属性已更改?的主要内容,如果未能解决你的问题,请参考以下文章