Saluti! Sto godendo utilizzando la luce MVVM quadro -Grande - ha reso la mia vita molto più facile, e ha rimosso una serie di ostacoli che sono stati rivelando difficile da superare ....utilizzando MVVM light messenger con Silverlight 4 ChildWindow classe di dialogo
Domanda:
Sto tentando di installare un personalizzato finestra di dialogo per la modifica dei messaggi che gli utenti si inviano reciprocamente. Sto tentando di costruire una finestra di dialogo personalizzata Silverlight utilizzando l'oggetto ChildWindow utilizzando il framework MVVM.
chiedevo se ci fossero eventuali suggerimenti su come questo potrebbe essere realizzato
seguito il codice di esempio MVVM finestra ho trovato qui: http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=209338 sono rimasto bloccato perché la finestra oggetto childWindow in Silverlight è asincrona, e ha un diverso Classe di risultato.
Quindi, l'idea di base che ho ora utilizza il modello di visualizzazione della classe (in questo caso Matrix.MessageViewModel) per creare un'istanza della finestra di dialogo personalizzata, inviarla tramite Messenger.Send <>, processo il messaggio registrato nella vista per visualizzare la finestra di dialogo, quindi il gestore del pulsante Salva della finestra di dialogo ChildWindow attiva un Messenger.Invia il contenuto modificato che viene quindi archiviato utilizzando il metodo Save sul viewmodel ...
Sembra un po ' round-about - quindi volevo essere sicuro che non ci fosse un modo più pulito ....
Bit di codice rilevanti:
vista del modello:
messageDialogBox = new MessageEditorDialog(
selectedMessage, this.SelectedSiteId, this.LoggedOnEmployee.Id, this.Projects);
DialogMessage editMessage = new DialogMessage(
this, messageDialogBox,"Edit Message", DialogMessageCallback);
Messenger.Default.Send(editMessage);
Vista:
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();
}
finestra di dialogo Salva:
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
Messenger.Default.Send<Message>(
this.MessageItem, CommandMessages.MessageTypes.MessageSave);
}
Questo legame indietro nel ViewModel, che ha un Messenger.Default .Registro <> guardando per il CommandTypes.MessageSave che indirizza il MessageItem risultante al modello per l'archiviazione .....
eccellente, grazie! Ho trovato l'approccio originale funzionante, ma lo rifatterò. Penso che i tuoi suggerimenti risolveranno alcune altre cose che ho incontrato ... –
@Mike Morley, dovresti accettare questa come risposta. –