ऐसा करने के दो अच्छे तरीके हैं, 1) एक डायलॉग सर्विस (आसान, साफ) और 2) व्यू असिस्टेड। सहायता प्राप्त दृश्य कुछ साफ-सुथरी विशेषताएं प्रदान करता है, लेकिन आमतौर पर इसके लायक नहीं है।
डायल सेवा
क) निर्माता या कुछ निर्भरता कंटेनर के माध्यम से एक संवाद सेवा इंटरफ़ेस:
interface IDialogService
{
Task ShowDialogAsync(DialogViewModel dlgVm);
}
ख) IDialogService के आपके कार्यान्वयन को एक विंडो खोलनी चाहिए (या सक्रिय विंडो में कुछ नियंत्रण इंजेक्ट करें), दिए गए dlgVm प्रकार (कंटेनर पंजीकरण या सम्मेलन का उपयोग करें या एक प्रकार का DataTemplates के साथ एक ContentPresenter) के नाम के अनुरूप दृश्य बनाएं। ShowDialogAsync एक TaskCompletionSource बनाना चाहिए और इसे वापस करना चाहिए। जब आप बंद करना चाहते हैं, तो DialogViewModel वर्ग को एक ऐसी घटना की आवश्यकता होती है, जिसे आप व्युत्पन्न वर्ग में शामिल कर सकते हैं और संवाद दृश्य में वास्तव में बंद / छुपाने और कार्य को पूरा करने के लिए कार्य देखें।
बी) का उपयोग करने के लिए, बस कॉल करें। इस डायलॉग को देखें। कुछ डायलॉग व्यूओडेल-व्युत्पन्न वर्ग के अपने उदाहरण पर डायलडॉग (myDlgVm)। रिटर्न का इंतजार करने के बाद, जो हुआ उसे निर्धारित करने के लिए अपने संवाद वीएम पर जोड़े गए गुणों को देखें; आपको कॉलबैक की भी आवश्यकता नहीं है।
वर्गीकृत देखें
यह दृश्यमॉडल पर किसी घटना को सुनने के लिए आपका दृष्टिकोण है। कोड के पीछे और संसाधन उपयोग से बचने के लिए यह सब एक ब्लेंड व्यवहार में लिपट सकता है यदि आप बहुत इच्छुक हैं (एफएमआई, "बिहेवियर" वर्ग को स्टेरॉयड पर एक प्रकार की ब्लेंडेबल संलग्न संपत्ति देखने के लिए उपवर्ग)। अभी के लिए, हम इसे प्रत्येक दृश्य पर मैन्युअल रूप से करेंगे:
a) एक कस्टम पेलोड (एक DialogViewModel व्युत्पन्न वर्ग) के साथ एक OpenXXXXXDialogEvent बनाएँ।
ख) अपने ऑनडॉटकॉन्टेक्स्टडेंज इवेंट में घटना के लिए सदस्यता लें। यदि पुराने मान! = अशक्त और विंडो के अनलोड किए गए ईवेंट में छिपाना और बंद करना सुनिश्चित करें।
c) जब ईवेंट भड़कता है, तो दृश्य को अपना दृश्य खोलें, जो आपके पेज पर एक संसाधन में हो सकता है, या आप इसे कहीं और कन्वेंशन द्वारा पता लगा सकते हैं (जैसे डायलॉग सेवा दृष्टिकोण में)।
यह दृष्टिकोण अधिक लचीला है, लेकिन उपयोग करने के लिए अधिक कार्य की आवश्यकता है। मैं इसका ज्यादा इस्तेमाल नहीं करता। एक अच्छा लाभ उदाहरण के लिए, एक टैब के अंदर भौतिक रूप से दृश्य रखने की क्षमता है। मैंने इसे वर्तमान उपयोगकर्ता नियंत्रण की सीमा में रखने के लिए एक एल्गोरिथ्म का उपयोग किया है, या यदि पर्याप्त बड़ा नहीं है, तो दृश्य पेड़ को पीछे छोड़ दें जब तक कि एक बड़ा पर्याप्त कंटेनर न मिल जाए।
यह संवादों को उस जगह के करीब होने की अनुमति देता है, जिसका वे वास्तव में उपयोग करते हैं, वर्तमान गतिविधि से संबंधित एप्लिकेशन के हिस्से को ही मंद कर देते हैं, और उपयोगकर्ता को एप्लिकेशन के भीतर चारों ओर ले जाने देते हैं, बिना संवादों को मैन्युअल रूप से दूर करने के लिए, यहां तक कि कई अर्ध भी हैं- मोडल संवाद विभिन्न टैब या उप-दृश्य पर खुलते हैं।