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());
}

したがって、このアプローチは適切ですか?今のところは機能しますが、将来、リストにアクセスするウィンドウがもう1つあると仮定しますが、3つのウィンドウ間のデータの更新を管理します。誰でももっと良い方法を提案できます。中央リポジトリを保持でき、更新されるたびに他のすべてのリストが更新されます。

4

1 に答える 1

1

MVVMを使用する場合、複数のウィンドウ間で1つのViewModel(ウィンドウ/ページのデータコンテキストとして使用されるデータを取得して保持するクラス)を使用するオプションがあり、このシナリオは一般的です。

インスタンス化されたViewModel(またはデータを格納するクラス)をすべてのウィンドウ間で共有し、ウィンドウの作成中にそれを渡して、ウィンドウ/ページのデータコンテキストをその1つのVMにバインドすることを選択します。このようにして、衛星ウィンドウはメインと同じデータを使用し、示されているように更新トリックを実行する必要がありません。さらに、新しいウィンドウは、他のすべてのユーザーがバインドしている監視可能なコレクションにバインドするだけです。

于 2013-01-24T14:18:37.890 に答える