在数据库更新时更新列表视图

Updating listviews when db updates

我是 MVVM 的新手,更新列表时遇到问题。

我有 2 个 windows 和 ListView。它们连接到 属性“任务”。当我向我的数据库添加新行时,我需要刷新 ListViews。我已经做到了,但只有 1 window.

正在向数据库添加新行 table

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();
            Tasks = new ObservableCollection<tasks>(Core.db.tasks); 
            //it updates only in the window from which I'm adding the row
        }

视图模型构造函数

public MainWindowViewModel()
        {
            AddTask = new RelayCommand(OnAddTaskExecuted, p => true);
            Tasks = new ObservableCollection<tasks>(Core.db.tasks);
        }

所以在点击一个按钮后我遇到了这种情况。 ListView 仅在我点击的 window 处更新,但在另一个处不更新(新任务是第一个)img

P.S。我有 2 个相同的 windows,我只是通过单击 btn 制作了一个新的相同 window。那只是为了测试。我实际上正在创建一个包含很多页面的大项目,我需要更新其中包含任务的每个集合。

您的问题是您有两个不同的 Window 实例和 ObservableCollection<tasks> Tasks

的单独实例

在 dotnet 中有多种方法可以以持久的方式构建数据。这里有一些:

  1. 假设两者 Windows 属于同一类型,最简单的方法是将任务设为静态字段。

  2. 创建一个单独的 class,例如。称为“TaskManager”,带有字段 Tasks,并使用它。如果 TaskManager 是静态的 class,您就不必费心组织任何实例。或者,有像 Singletons 这样的概念。您还可以将数据或包含数据的对象存储在 App.xaml.cs 中,然后您可以通过 Application.Current.SomeField

    访问它

如果您想重复使用同一个 Window 实例而不是将数据存储在其他地方,这实际上取决于您如何导航到 Window。如果你用这样的东西打开你的 Window...

MyWindow window = new MyWindow();
window.Show();

... 那么您必须如上所述以持久方式存储您的 Window 实例,而不是每次要显示它时都使用 new MyWindow() 实例化一个新实例。