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() を介して)。
より良い/簡単/クリーンなアプローチはありますか?