IMHO यह NotificationMessageAction<T>
उपयोग करने के लिए के रूप में यह इस कार्य के लिए बाहर कट जाता है बेहतर है।
इस तरफ:
var msg = new NotificationMessageAction<MessageBoxResult>(this, "GetPassword", (r) =>
{
if (r == MessageBoxResult.OK)
{
// do stuff
}
});
Messenger.Default.Send(msg);
और रिसीवर की ओर:
Messenger.Default.Register<NotificationMessageAction<MessageBoxResult>>(this, (m) =>
{
if (m.Notification == "GetPassword") {
var dlg = new PasswordDialog();
var result = dlg.ShowDialog();
m.Execute(result);
}
});
मुझे विश्वास है कि इस दृष्टिकोण क्लीनर है यह ViewModel करने के लिए दृश्य से एक अनावश्यक निर्भरता पैदा नहीं करता के रूप में (हालांकि इस तरह दौर इतना बुरा नहीं है)। बेहतर पठनीयता के लिए NodificationMessageAction<MessageResult>
उप-वर्गीकरण पर विचार करें। अर्थात।
public class ShowPasswordMessage : NotificationMessageAction<MessageBoxResult>
{
public ShowPasswordMessage(object Sender, Action<MessageBoxResult> callback)
: base(sender, "GetPassword", callback)
{
}
}
तो इस
var msg = new ShowPasswordMessage(this, (r) =>
{
if (r == MessageBoxResult.OK)
{
// do stuff
}
});
Messenger.Default.Send(msg);
और रिसीवर की ओर
Messenger.Default.Register<ShowPasswordMessage>(this, (m) =>
{
var dlg = new PasswordDialog();
var result = dlg.ShowDialog();
m.Execute(result);
});
एक बहुत स्पष्ट हो जाता है।
और verry महत्वपूर्ण प्राप्तकर्ता को अनधिकृत करें अन्यथा आप एक स्मृति रिसाव बना सकते हैं।
+1: आपके उत्तर ने बहुत मदद की! अच्छी व्याख्या के लिए धन्यवाद। अपंजीकृत मुद्दे के बारे में भी नहीं पता था। दुर्भाग्यवश मुझे एमवीवीएम-लाइट, केवल कुछ ब्लॉग और उदाहरण कोड के लिए कोई अच्छा और पूर्ण दस्तावेज नहीं मिला। – nabulke
महान काम करता है। एक छोटी सी त्रुटि: यह वर संदेश = नए ShowPasswordMessage (यह, (आर) => 'इस पक्ष पर होना चाहिए शायद आप भविष्य में संदर्भ के लिए इसे संपादित कर सकते (मैं काफी विशेषाधिकार नहीं हैं) – nabulke
@nabulke:। लॉरेंट के ब्लॉग http://www.galasoft.ch पर कुछ अच्छे उदाहरण हैं। इसके अलावा उनके Mix 2010 वीडियो MVVM प्रकाश शुरू करने के लिए बहुत जरूरी है। पोस्ट का संपादन किया। – AxelEckenberger