我是 MVVM 的新手,我在更新串列時遇到了問題。
我有 2 個視窗和 ListViews。它們連接到屬性“任務”。當我向資料庫添加新行時,我需要重繪 ListViews。我已經做到了,但僅限于 1 個視窗。
向資料庫表添加新行
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);
}
因此,在單擊 btn 后,我遇到了這種情況。ListView 只在我點擊的視窗中更新,而不是在另一個視窗中更新(新任務是第一個)img
PS 我有 2 個相同的視窗,我只是通過 btn 單擊創建一個新的相同視窗。那只是為了測驗。我實際上正在創建一個包含大量頁面的大專案,我需要更新每個包含任務的集合。
uj5u.com熱心網友回復:
您的問題是您有兩個不同的 Window 實體,它們具有不同的實體 ObservableCollection<tasks> Tasks
dotnet 中有多種方法可以持久地構建資料。這里有一些:
假設兩個 Windows 的型別相同,最簡單的方法是將 Tasks 設為靜態欄位。
創建一個單獨的類,例如。稱為“TaskManager”,帶有一個欄位
Tasks,并使用它。如果 TaskManager 是一個靜態類,則您不必費心組織任何實體。或者,還有像單身人士這樣的概念。您還可以將資料或包含資料的物件存盤在 App.xaml.cs 中,然后您可以通過Application.Current.SomeField
如果您想重用相同的 Window 實體而不是將資料存盤在其他地方,那實際上取決于您導航到 Window 的方式。如果你用這樣的東西打開你的視窗......
MyWindow window = new MyWindow();
window.Show();
...然后您必須以如上所述的持久方式存盤您的 WindowInstance,而不是在new MyWindow()每次您想顯示它時實體化一個新的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349822.html
上一篇:WPF條件資料網格分組
下一篇:如何準確驗證SSL證書(CA)?
