काफी देर हो चुकी है, लेकिन मुझे लगता है कि यह कई अलग-अलग दृष्टिकोणों के लायक होने के लिए काफी मुश्किल है।
मैं समझता हूँ कि मैं अपने वीएम संलग्न दृश्य के बारे में पता करने के लिए नहीं करना चाहते हैं, लेकिन यह उचित देखें अपने वी एम के लिए एक संदर्भ के लिए के लिए है?
जैसा कि पहले से ही उत्तर दिया गया है, उचित दृश्य-दृश्य मॉडल व्यवस्था में व्यूमोडेल को व्यू की डेटा कॉन्टेक्स्ट संपत्ति के रूप में असाइन किया गया है। इससे डाटाबेसिंग को घोषित एक्सएएमएल से स्थापित "स्वचालित रूप से" या कोड के पीछे ठीक-ठीक किया जा सकता है।
var dc = DataContext as CleverViewModel;
CleverViewModel.CleverProperty.Add(someValue); // just a simple example
मैं चीजों DataContext कास्ट करने के लिए नहीं है इस तरह की प्राप्त करने के लिए उचित तरीके से विश्वास करते हैं, लेकिन इसके बजाय:
कभी कभी, आप लिखने के लिए, अपने कोड में पीछे, कुछ इस तरह परीक्षा कर दिया जाएगा:
दृश्य में कुछ समर्पित नियंत्रण, उदाहरण के लिए एक ItemsControl कुछ संपत्ति करने के लिए अपने ItemsSource दो तरह डेटाबाउंड साथ viewmodel में है:
<ItemsSource x:Name="cleverControl" Visibility="Collapsed" ItemsSource="{Binding CleverProperty, Mode=TwoWay}"/>
कास्ट पूरे ViewModel के बजाय बाध्य संपत्ति, कोड में पीछे:
var collection = (ObservableCollection<double>)cleverControl.ItemsSource; collection.Add(someValue);
नोट महत्वपूर्ण अंतर: इस उदाहरण में दूसरा दृष्टिकोण की आवश्यकता नहीं है ViewModel प्रकार को जानने के लिए देखें, इसे केवल नाम की एक संपत्ति की आवश्यकता है ObservableCollection<double>
। यह मुझे पॉलिमॉर्फिक या यहां तक कि बतख-टाइप किए गए व्यू मॉडल्स की अनुमति देता है।
एक दृश्य में एक नियंत्रण (जैसे एक संवाद के रूप में) एक और देखें मैं दृश्य में इस संभाल चाहिए खोलता है? के बाद से वीएम में इसे संभालना गलत लगता है तो वीएम के पास एक विशिष्ट दृश्य का कुछ ज्ञान है।
यह सख्त एमवीवीएम में नहीं होना चाहिए, और डेटा टेम्पलेट का उपयोग करने से बचना मुश्किल नहीं है।DataTemplates देखने का एक दिया प्रकार के DataContext की दी गई प्रकार के नक्शे, इसलिए कभी भी एक ContentControl परिवर्तन की DataContext, अपने प्रदर्शन में भी परिवर्तन होता है, बशर्ते आप उस प्रकार के लिए एक DataTemplate है:
ध्यान में रखते हुए एक नियंत्रण ViewModel में कमांड भेज सकता है, जो बदले में अपनी कुछ संपत्तियों को अपडेट करेगा, जो दृश्य द्वारा प्रतिबिंबित होंगे।
एक दृश्य में व्यूमोडेल के ज्ञान के बाहर एक और दृश्य हो सकता है। इस मामले में, पीछे वाला कोड निहित दृश्य के डेटाकॉन्टेक्स्ट में हेरफेर कर सकता है।
अधिक सूक्ष्मताएं हैं, लेकिन मैं अच्छे परिणामों के साथ इस दृष्टिकोण का उपयोग कर रहा हूं। उम्मीद है कि यह किसी की मदद करता है।
एक दृश्य एक वीएम संदर्भित करता है लेकिन यह अन्य तरीका नहीं होना चाहिए। http://stackoverflow.com/a/3670669/1977871 – VivekDev