2009-06-11 14 views
5

में दृश्य में व्यूमोडेल को हुक अप करना मैं व्यूमोडेल को दृश्य में जोड़ने के दो तरीके देख सकता हूं। एक एक्सएएमएल में है और दूसरा कोड के पीछे निर्भरता इंजेक्शन के माध्यम से है।सिल्वरलाइट

कौन सी विधि अधिक बेहतर है? मैं xaml विधि पसंद करता हूं क्योंकि मुझे कोड में किसी भी कोड को पीछे नहीं चाहिए, लेकिन क्या एक दूसरे के साथ कोई समस्या है?

<navigation:Page x:Class="MyNamespace.MyViewModel" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ViewModel="clr-namespace:MyNameSpace.MyViewModel" 
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    Title="ViewModel Page" > 

    <navigation:Page.Resources> 
     <ViewModel:MyViewModel x:Key="ViewModel"></ViewModel:MyViewModel> 
    </navigation:Page.Resources> 

    <Grid x:Name="LayoutRoot" Background="White" 
      DataContext="{StaticResource ViewModel}"> 

    </Grid> 
</navigation:Page> 

या

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Windows.Navigation; 

namespace MyNamespace 
{ 
    public partial class MyView : Page 
    { 
     public MyView() 
     { 
      InitializeComponent(MyViewModel viewModel); 

      this.DataContext = viewModel; 
     } 
    } 
} 

उत्तर

3

शॉन के पास पहले View or ViewModel पर एक अच्छी पोस्ट है। एक्सएएमएल में वीएम होने से आपको ब्लेंडेबिलिटी मिलती है (ब्लेंड में नमूना डेटा देखकर) जो ठंडा है, लेकिन कीमत को जानकारी में वापस धक्का देना पड़ता है। इस कारण से जॉन पापा इस दृष्टिकोण से दूर चले गए हैं।

मैं शॉन के विवाह विचार का उपयोग कर रहा हूं (उपरोक्त लिंक देखें)।

HTH -Erik

+0

हम्म .. लिंक के लिए धन्यवाद। मैं इसे अभी पढ़ रहा हूँ। मुझे लगता है कि मुझे इसे कुछ और बार पढ़ने की जरूरत है क्योंकि मुझे कुछ नहीं मिल रहा है। शॉन कहते हैं, "इन दोनों तरीकों से मुझे दृश्य-दृश्य के दृश्य के चिपचिपापन को पसंद नहीं करना पड़ेगा। इसके अलावा, इनमें से दोनों एक-से-एक रिश्ते को दर्शाते हैं, जबकि आम मामला हमेशा मामला नहीं है । " लेकिन व्यू-फर्स्ट के साथ कई विचार एक वीएम के लिए डेटाबेस हो सकते हैं। क्या एक दृश्य एक से अधिक वीएम तक सीमित हो सकता है? हमम .. फिर, मुझे लगता है कि यदि आपका वी एक साधारण ग्रिड था तो यह अलग-अलग वीएम से बंधे रहना चाहता था। –

+0

अब तक, मैं वीएस और वीएम के बीच एक-से-एक संबंध रखने का प्रशंसक हूं। जिसका मतलब यह नहीं है कि मैं पदानुक्रम के खिलाफ हूं। यही है, एक दृश्य में अपने स्वयं के वीएम के साथ प्रत्येक उप-विचार हो सकते हैं, और यह काफी अच्छी तरह से काम करने लग रहा है। –

+0

हमारे आवेदन में हमारे पास एक मानक ग्रिड व्यू है जो केवल डेटा की पंक्तियां प्रदर्शित करता है। वह डेटा विभिन्न व्यू मॉडल्स से हो सकता है, इसलिए इसे एक से एक में रखना हमारे लिए समझ में नहीं आता है। एकाधिक ग्रिड दृश्य होने में कोई बिंदु नहीं है जब वे डेटा के अलावा सभी समान हैं। –

0

जिस तरह से आप इसे यहाँ है, मैं XAML के साथ जाना होगा। DataContext प्रॉपर्टी पर सेट करने के अन्य तरीके हैं। यदि आप रुचि रखते हैं, तो WPF के लिए माइक्रोसॉफ्ट सीएजी ढांचे को देखें।

0

मैं क्योंकि दृश्य के इस मेकअप परीक्षण बहुत आसान कोड में वी एम निर्धारित किया है। जस्टिन एन्जिल इस के लिए एक महान पोस्ट है:

public partial class Page : UserControl 
{ 
    private PageViewModel _viewModel = new PageViewModel(); 

    public PageViewModel ViewModel 
    { 
     get { return _viewModel; } 
     set { _viewModel = value; } 
    } 

    public Page() 
    { 
     InitializeComponent(); 
     this.Loaded += new RoutedEventHandler(Page_Loaded); 
    } 

    void Page_Loaded(object sender, RoutedEventArgs e) 
    { 
     this.DataContext = ViewModel; 
    } 

} 

मैं MVVM पैटर्न आसपास के परीक्षण के intricasies के बारे में सीखने के लिए बहुत उपयोगी हो करने के लिए अपने पद मिल गया।

http://silverlight.net/blogs/justinangel/archive/2009/02/25/silverlight-unit-testing-rhinomocks-unity-and-resharper.aspx

+0

लिंक के लिए धन्यवाद। मैं अभी भी इसे पढ़ रहा हूं लेकिन मैं अभी शॉन की विधि पसंद करता हूं। मुझे इसके बारे में सोचने में कुछ और वक्त बिताने की ज़रूरत है, लेकिन मैं एक स्पष्ट रूप से डीक्यूप्लेड वीएम और वी चाहता हूं। –

4

मैं एक वर्ग का उपयोग मैं एक "स्क्रीन" कि MVVM त्रय संभालती डब। मैंने वी वी में इंजेक्शन देने के बाद एक वीएम में संसाधन के रूप में एक वीएम शुरू किया, लेकिन अंत में स्क्रीन अवधारणा ने मेरे लिए सबसे अच्छा काम किया। यह मुझे एक दूसरे के साथ जोड़े बिना वी और वीएम का उपयोग करने की अनुमति देता है। यह मेरे समग्र प्रस्तुति ढांचे में अन्य कार्यक्षमताओं को भी दूर करता है।

public CatalogItemScreen(IUnityContainer container) : base(container) 
    { 
     this.ViewModel = Container.Resolve<ICatalogItemViewModel>(); 
     this.View = Container.Resolve<CatalogItemView>(); 
     this.View.DataContext = this.ViewModel; 
    } 

सूचना है कि वी एम स्क्रीन में बनाया जाता है, वी यहां बनाई गई है, और 2 एक दूसरे के लिए बाध्य कर रहे हैं: यहाँ एक उदाहरण के रूप में मेरी स्क्रीन वर्ग के लिए निर्माता है। यह नमूना एकता और प्रिज्म का उपयोग करता है, लेकिन इसे हासिल करना आवश्यक नहीं है।