ご挨拶!MVVM ライト (素晴らしいフレームワーク) を使用することを楽しんでいます。これにより、私の生活がはるかに楽になり、克服するのが困難であることが証明されていた多くの障壁が取り除かれました....
質問:
ユーザーが相互に送信するメッセージを編集するためのカスタム ダイアログ ボックスをセットアップしようとしています。MVVM フレームワークを使用して、ChildWindow オブジェクトを使用して Silverlight カスタム ダイアログ ボックスを作成しようとしています。
これがどのように達成されるかについて何か提案があるかどうか疑問に思っていました
ここで見つけたダイアログMVVMサンプル コードに従ってください。
したがって、私が今持っている基本的な考え方は、クラスのビュー モデル (この場合は Matrix.MessageViewModel) を使用してカスタム ダイアログ ボックスのインスタンスを作成し、Messenger.Send<> を介して送信し、登録されたメッセージを処理することです。ダイアログを表示するビューを作成し、ChildWindow ダイアログ ボックスの [保存] ボタン ハンドラーで Messenger.Send を起動し、変更されたコンテンツをビューモデルの Save メソッドを使用して保存します...
少し回りくどいようです - よりクリーンな方法がないことを確認したかったのです....
関連するコード ビット:
ビュー モデル:
messageDialogBox = new MessageEditorDialog(
selectedMessage, this.SelectedSiteId, this.LoggedOnEmployee.Id, this.Projects);
DialogMessage editMessage = new DialogMessage(
this, messageDialogBox,"Edit Message", DialogMessageCallback);
Messenger.Default.Send(editMessage);
意見:
public ViewHost()
{
InitializeComponent();
Loaded += new RoutedEventHandler(ViewHost_Loaded);
if (!ViewModelBase.IsInDesignModeStatic)
{
// Use MEF To load the View Model
CompositionInitializer.SatisfyImports(this);
}
ApplicationMessages.IsBusyMessage.Register(this, OnIsBusyChange);
Messenger.Default.Register<DialogMessage>(this, msg => ShowDialog(msg));
}
private void ShowDialog(DialogMessage msg)
{
MessageEditorDialog myDialog = (MessageEditorDialog) msg.Target;
myDialog.Show();
}
ダイアログの保存:
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
Messenger.Default.Send<Message>(
this.MessageItem, CommandMessages.MessageTypes.MessageSave);
}
これは、結果の MessageItem をストレージ用のモデルにルーティングする CommandTypes.MessageSave を監視する Messenger.Default.Register<> を持つ ViewModel に結び付けられます.....