不同窗口之间的WPF共享和更新列表

时间:2013-01-24 14:04:39

标签: c# wpf

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

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

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

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个窗口之间的数据刷新....这是不正确的。任何人都可以建议一些更好的方法,我可以保留一个中央存储库,每当更新时,所有其他列表都会更新。

1 个答案:

答案 0 :(得分:1)

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

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