pesan di mvvmlight secara teori seharusnya dibakar dan dilupakan...pengirim tidak peduli siapa yang menerima pesan dan penerima tidak peduli siapa yang mengirim pesan, asalkan jenis pesannya tepat untuk didengarkan. Saya telah menemukan melalui banyak percobaan dan kesalahan bahwa jauh lebih mudah untuk membuat pesan Anda sendiri daripada menggunakan default yang disediakan oleh mvvm-light, itu adalah titik awal yang baik, tetapi kadang-kadang Anda hanya menemukan diri Anda melompati rintangan..
public class ExceptionMessage : GalaSoft.MvvmLight.Messaging.GenericMessage<System.Exception>
{
public ExceptionMessage(System.Exception content) : base(content) { }
public ExceptionMessage(object sender, System.Exception content) : base(sender, content) { }
public ExceptionMessage(object sender, object target, System.Exception content) : base(sender, target, content) { }
}
Kode penerima:
Messenger.Default.Register<Core.Messaging.ExceptionMessage>(this, ex => ShowExceptionMessage(ex));
Kode Pengirim:
public void LogException(Exception content)
{
_messenger.Send<Core.Messaging.ExceptionMessage>(new ExceptionMessage(content));
//GetBw().RunWorkerAsync(content);
WriteToDatabaseLog(content);
}
dan ya ini mematahkan saran dalam kalimat pertama saya, tetapi secara teori saya dapat memiliki beberapa vm atau tampilan mendengarkan pesan pengecualian.
Mungkin contoh lain untuk membantu Anda... saya benci semua hal foo...itu selalu membingungkan saya...
Ini ada di modul inti saya:
public class SaveNotification<T> : GalaSoft.MvvmLight.Messaging.NotificationMessage<T> where T : GalaSoft.MvvmLight.ViewModelBase
{
public SaveNotification(T content, string notification) : base(content, notification) { }
public SaveNotification(object sender, T content, string notification) : base(sender, content, notification) { }
public SaveNotification(object sender, object target, T content, string notification) : base(sender, target, content, notification) { }
}
inilah cara saya menggunakannya di vm saya:
public void OnSubmitChanges(SubmitOperation so)
{
if (so.HasError)
{
Infrastructure.GetService<IExceptionLoggingInterface>().LogException(this, so.Error);
}
else
{
//Save Responses
_messenger.Send<Messages.NavigationRequest<SubClasses.URI.PageURI>>(GetNavRequest_HOME());
ClearQuestionaire(true);
_messenger.Send<WavelengthIS.Core.Messaging.SaveNotification<QuestionairreViewModel>>(GetSuccessfulSaveNotification());
}
Wait.End();
}
private WavelengthIS.Core.Messaging.SaveNotification<QuestionairreViewModel> GetSuccessfulSaveNotification()
{
return new WavelengthIS.Core.Messaging.SaveNotification<QuestionairreViewModel>(this, "Save Successfull");
}
person
ecathell
schedule
27.05.2011