【发布时间】:2010-07-27 03:04:59
【问题描述】:
您好!我喜欢使用 MVVM 轻量级框架 - 伟大的框架 - 让我的生活变得更加轻松,并消除了许多被证明难以克服的障碍....
问题:
我正在尝试设置一个自定义对话框来编辑用户相互发送的消息。我正在尝试使用 MVVM 框架的 ChildWindow 对象构建一个 Silverlight 自定义对话框。
想知道是否有任何关于如何实现这一点的建议
按照我在此处找到的对话框 MVVM 示例代码:http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=209338 我卡住了,因为 Silverlight 中的 ChildWindow 对话框对象是异步的,并且具有不同的 Result 类。
所以 - 我现在的基本想法是使用类的视图模型(在本例中为 Matrix.MessageViewModel)创建自定义对话框的实例,通过 Messenger.Send 发送它,处理在视图中注册消息以显示对话框,然后让 ChildWindow 对话框的 Save 按钮处理程序触发 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);
}
这与 ViewModel 相关联,它有一个 Messenger.Default.Register 监视 CommandTypes.MessageSave,它将生成的 MessageItem 路由到模型进行存储.....
【问题讨论】:
标签: silverlight silverlight-4.0 mvvm-light childwindow