问候!我喜欢使用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,修改后的内容然后使用viewmodel上的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&lt;&gt;观察CommandTypes.MessageSave,它将生成的MessageItem路由到模型进行存储.....
答案 0 :(得分:8)
这与我的工作非常接近,除了有几件事我做的不同。
以下是我根据建议2&amp ;;对视图模型所做的更改。 3。
public class MessageEditorDialogViewModel : ViewModelBase
{
private DialogMessage _dialogMessage;
public RelayCommand SaveCommand { get; private set; }
public DialogMessage Message { get; set; }
public MessageEditorDialogViewModel()
{
SaveCommand = new RelayCommand(SaveCommandExecute);
}
private SaveCommandExecute()
{
Message.Execute();
}
}