0

我正在尝试在 WPF 中创建一个调度程序。我在主窗口中有一个中央静态列表,由后台工作人员在加载时初始化。主窗口中还有一个调度定时器,每次列表更改时都会重新计算其间隔。

public static List<ListViewcls> TODOdatalst = null;
public static void RefreshdblList()
{
    if (ApplicationState.GetValue<bool>("dbDetected"))
    {
        TODOdatalst = DataAccess.ReadAllTODODataFromDataBase();
        InitialiseDailyReminders();
    }
}

现在有另一个窗口,其中包含一个列表视图,该列表视图绑定到一个可观察集合,该集合派生自主窗口中的静态列表。每当从列表中添加、更新或删除项目时,两个窗口中的列表都会通过静态函数手动刷新。

private static readonly ObservableCollection<ListViewcls> TO_DOViewlst = new ObservableCollection<ListViewcls>();
public void RefreshView()
{
    MainWindow.RefreshdblList();
    if (MainWindow.TODOdatalst != null)
        InitialiseListView(MainWindow.TODOdatalst);
    else
        InitialiseListView(DataAccess.ReadAllTODODataFromDataBase());
}

那么这种方法是否正确?它现在有效,但假设将来,我还有一个窗口也将访问列表,但随后我将管理 3 个窗口之间的数据刷新......这不正确。任何人都可以提出一些更好的方法,即我可以保留一个中央存储库,并且每当它更新时,所有其他列表都会更新。

4

1 回答 1

1

当使用 MVVM 时,可以选择在多个窗口之间使用一个 ViewModel(获取并保存用作窗口/页面的数据上下文的数据的类),这种情况很常见。

我会选择在所有窗口之间共享实例化的 ViewModel(或包含您的数据的类),并在创建窗口期间将其传入,以使窗口/页面的数据上下文绑定到该 VM。这样,卫星窗口使用与主窗口相同的数据,而无需执行任何更新技巧,如图所示。此外,任何新窗口都只需绑定到其他人绑定的可观察集合。

于 2013-01-24T14:18:37.890 回答