1

WPF で MVVM Light Toolkit を使用して MVVM を学習しようとしています。しかし、私は1つの単純な問題で立ち往生しています。

基本的にプロファイル名のテキストボックスと確認ボタンがある AddEditProfileWindow があります。新しいプロファイルをデータベース テーブルに追加するか、既存のプロファイルの名前を更新します。

MainWindow/MainViewModel には、プロファイルのリストと、[プロファイルの追加] と [選択したプロファイルの編集] の 2 つのボタンがあります。どちらもコマンド + メッセージを介してこのウィンドウを開きます。たとえば、「プロファイルの追加」ボタンのコマンドは次のとおりです。

    public RelayCommand OpenAddProfileWindowCommand
    {
        get
        {
            return _openAddProfileWindowCommand ?? (_openAddProfileWindowCommand = new RelayCommand(
                () => { Messenger.Default.Send(new NotificationMessage("OpenAddProfile")); }));
        }
    }

MainWindowコードビハインドのレシーバーです

private void MessageReceived(NotificationMessage msg)
{
    if (msg.Notification == "OpenAddProfile")
    {
        var window = new AddEditProfileWindow();
        window.Owner = this;
        window.ShowDialog();
    }
}

したがって、問題は、ウィンドウの動作を変更して少しカスタマイズする (タイトルと確認ボタンのテキストを "追加」または「更新」)。また、更新には、選択したレコードの Profile オブジェクト (または少なくとも Id) が必要です。

ViewModel の作成には、ViewModelLocator と Unity を使用します

    public ViewModelLocator()
    {
        var container = new UnityContainer();

        ServiceLocator.SetLocatorProvider(() => new UnityServiceLocator(container));

        container.RegisterType<MainViewModel>(new ContainerControlledLifetimeManager()); // singleton
        container.RegisterType<AddEditProfileViewModel>(); 
    } 

    public AddEditProfileViewModel AddEditProfile
    {
        get
        { return ServiceLocator.Current.GetInstance<AddEditProfileViewModel>();  }
    }

私は多くの同様のスレッドと例を読みましたが、モデルを表示するためにパラメーターを渡す方法をまだ理解していません。一部の回答は、ViewModelLocator でアプリの起動時にビュー モデルを作成する (そしてそれらをシングルトンにする) ことを提案しており、開く前にメッセージを送信できます。しかし、あまりきれいではないように見えます。また、開く前にビューモデルをリセットする必要があります (おそらく Cleanup() を介して)。

より良い/簡単/クリーンなアプローチはありますか?

4

1 に答える 1