Salutations! Jouis en utilisant MVVM lumière cadre -Grande - a rendu ma vie beaucoup plus facile, et a supprimé un certain nombre d'obstacles qui ont été difficiles à surmonter révèlent ....en utilisant MVVM light messenger avec Silverlight 4 Classe de dialogue ChildWindow
Question:
Je tente d'installer une coutume boîte de dialogue pour l'édition des messages que les utilisateurs envoient les uns aux autres. Je tente de construire une boîte de dialogue personnalisée Silverlight en utilisant l'objet ChildWindow à l'aide de l'infrastructure MVVM.
Je me demandais s'il y avait des suggestions quant à la façon dont cela pourrait être accompli
Après l'exemple de code MVVM dialogue J'ai trouvé ici: http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=209338 je suis coincé parce que l'objet de dialogue ChildWindow dans Silverlight est async, et a un autre Classe de résultat Donc, l'idée de base que j'ai maintenant est d'utiliser le modèle de vue de la classe (dans ce cas, le Matrix.MessageViewModel) pour créer une instance de la boîte de dialogue personnalisée, envoyez-la via Messenger.Send <>, processus le message enregistré dans la vue pour afficher la boîte de dialogue, puis le gestionnaire de bouton Enregistrer la boîte de dialogue ChildWindow déclencher un Messenger.Send avec le contenu modifié qui est ensuite stocké en utilisant la méthode Save sur le modèle viewmodel ...
Semble un peu rond-sur - donc voulu s'assurer qu'il n'y avait pas un moyen plus propre ....
bits de code pertinents:
vue modèle:
messageDialogBox = new MessageEditorDialog(
selectedMessage, this.SelectedSiteId, this.LoggedOnEmployee.Id, this.Projects);
DialogMessage editMessage = new DialogMessage(
this, messageDialogBox,"Edit Message", DialogMessageCallback);
Messenger.Default.Send(editMessage);
Vue:
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();
}
Dialog Economie:
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
Messenger.Default.Send<Message>(
this.MessageItem, CommandMessages.MessageTypes.MessageSave);
}
Ce lien de nouveau dans le ViewModel, qui a un Messenger.Default .Enregistrer <> regarder pour le CommandTypes.MessageSave qui route le MessageItem résultant au modèle pour le stockage .....
excellent merci! J'ai eu l'approche originale de travail, mais refactor à la vôtre - je pense que vos suggestions vont résoudre quelques autres choses que j'ai rencontrées ... –
@Mike Morley, vous devriez accepter cela comme la réponse. –