问候!我很享受使用 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 路由到模型进行存储.....