在数据库更新时更新列表视图
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 中有多种方法可以以持久的方式构建数据。这里有一些:
假设两者 Windows 属于同一类型,最简单的方法是将任务设为静态字段。
创建一个单独的 class,例如。称为“TaskManager”,带有字段 Tasks
,并使用它。如果 TaskManager 是静态的 class,您就不必费心组织任何实例。或者,有像 Singletons 这样的概念。您还可以将数据或包含数据的对象存储在 App.xaml.cs 中,然后您可以通过 Application.Current.SomeField
访问它
如果您想重复使用同一个 Window 实例而不是将数据存储在其他地方,这实际上取决于您如何导航到 Window。如果你用这样的东西打开你的 Window...
MyWindow window = new MyWindow();
window.Show();
... 那么您必须如上所述以持久方式存储您的 Window 实例,而不是每次要显示它时都使用 new MyWindow()
实例化一个新实例。
我是 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 中有多种方法可以以持久的方式构建数据。这里有一些:
假设两者 Windows 属于同一类型,最简单的方法是将任务设为静态字段。
创建一个单独的 class,例如。称为“TaskManager”,带有字段
访问它Tasks
,并使用它。如果 TaskManager 是静态的 class,您就不必费心组织任何实例。或者,有像 Singletons 这样的概念。您还可以将数据或包含数据的对象存储在 App.xaml.cs 中,然后您可以通过Application.Current.SomeField
如果您想重复使用同一个 Window 实例而不是将数据存储在其他地方,这实际上取决于您如何导航到 Window。如果你用这样的东西打开你的 Window...
MyWindow window = new MyWindow();
window.Show();
... 那么您必须如上所述以持久方式存储您的 Window 实例,而不是每次要显示它时都使用 new MyWindow()
实例化一个新实例。