2010-04-18 8 views
5

में व्यूमोडेल मैपिंग क्लासिक एमवीवीएम उदाहरणों में देखा गया डेटा टेम्पलेट परिभाषाओं का उपयोग मैप करने के लिए मॉडलों को देखने के लिए किया जाता है, एमवीवीएम लाइट फ्रेमवर्क में ऐसा करने का मानक तरीका क्या है, और मैपिंग कहां स्थित होनी चाहिए? निम्नलिखित उदाहरण हैं कि मैं अब क्या कर रहा हूं और मैं किस बारे में बात कर रहा हूं, मेरे लिए मिश्रण क्षमता महत्वपूर्ण है!नेस्टेड व्यू को परिभाषित करने के लिए मानक सम्मेलन क्या है: एमवीवीएम लाइट

मुख्य विंडो:

public ApplicationManagementViewModel ApplicationManagementViewModel {get {...} set {...} } 

मैं संदर्भ ResourceDictionary "ViewMappings.xaml:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     x:Class="STS2Editor.MainWindow" 
     Title="{Binding ApplicationTitle, Mode=OneWay}" 
     DataContext="{Binding RootViewModel, Source={StaticResource Locator}}"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Skins/ApplicationSkin.xaml" /> 
       <ResourceDictionary Source="Resources/ViewMappings.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 
    <Grid> 
     <ContentControl Content="{Binding ApplicationManagementViewModel}" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
    </Grid> 
</Window> 

उपरोक्त कोड में, मेरी RootViewModel वर्ग एक ही संपत्ति के नाम के साथ वर्ग ApplicationManagementViewModel का एक उदाहरण है "यह निर्दिष्ट करने के लिए कि मेरे व्यू मॉडल को एक दृश्य के रूप में कैसे दर्शाया गया है।

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:STS2Editor.ViewModel"> 
    <DataTemplate DataType="{x:Type local:ApplicationManagementViewModel}"> 
     <local:ApplicationManagementView/> 
    </DataTemplate> 
</ResourceDictionary> 

क्या मुझे ViewModelLocator का उपयोग करके इस तरह की चीजें करनी चाहिए? दृश्य मॉडल के संग्रह के बारे में क्या?

+0

मुझे एहसास है कि एमवीवीएम के साथ बड़े मुद्दों में से एक एक एकीकृत पद्धति की कमी है। – Firoso

+0

मुझे नहीं लगता कि यह एमवीवीएम प्रति से एक मुद्दा है। यह कई कार्यान्वयन के साथ एक पैटर्न है। एमवीसी या अन्य के साथ ही। मैं इसे एक मुद्दा नहीं मानता, यह वास्तव में उस स्थिति और समस्या पर निर्भर करता है जिसे आप हल करने की कोशिश कर रहे हैं। – LBugnion

+0

मेरे पास बहुत ही समान प्रश्न हैं। तो डेटा टेम्पलेट्स WPF के लिए पर्याप्त हैं? मैं प्रिज्म क्षेत्रों की चीज चाहता हूं, लेकिन प्रिज्म के बिना। – nportelli

उत्तर

4

आपके द्वारा उपयोग की जाने वाली विधि (स्पष्ट रूप से टाइप किए गए डेटा टेम्पलेट्स के साथ) WPF में ठीक काम करती है, लेकिन दुर्भाग्यवश यह सिल्वरलाइट में काम नहीं करती है। यह एक कारण है कि मैं एक और स्पष्ट विधि का उपयोग करना पसंद करता हूं जो दोनों दुनिया में काम करता है।

इसके अलावा, स्पष्ट रूप से टाइप किया गया डेटा टेम्पलेट थोड़ा उलझन में हो सकता है, क्योंकि यह हमेशा स्पष्ट नहीं होता है कि टेम्पलेट कहां से आता है। यह कई बार इंटीग्रेटर के काम को बहुत कठिन बना सकता है, खासकर यूआई में छोटे बदलावों के लिए (वहां किया गया था :)

एमवीवीएम लाइट में व्यूमोडेल लोकेटर का उपयोग करने का कोई दायित्व नहीं है, यह एक ऐसा तरीका है अच्छी तरह से काम करता है और समझने में काफी आसान है (कोड पढ़ने वाले लोगों के लिए जो डब्ल्यूपीएफ/एसएल के उप-समूहों से परिचित नहीं हैं)। अंत में, यह वरीयता का विषय बहुत अधिक है, लेकिन हाल ही में ViewModelLocator पैटर्न लोकप्रियता में लाभ प्रतीत होता है (उदाहरण के लिए यह पोस्ट देखें जहां एक सामान्य व्यू मॉडेल लोकेटर का उपयोग एमईएफ के साथ किया जाता है)।

http://www.johnpapa.net/simple-viewmodel-locator-for-mvvm-the-patients-have-left-the-asylum/

अंत में, मुझे जोड़ने कि मैं MVVM लाइट में ViewModelLocator की वर्तमान कार्यान्वयन के साथ बहुत संतुष्ट नहीं हूँ, और मैं अगले संस्करण में एक और अधिक सामान्य समाधान प्रस्तावित करना चाहते हैं।

+0

लिंक टूटा हुआ है – vidstige

संबंधित मुद्दे