2012-12-06 10 views
12

में परिभाषित व्यू मॉडेल में सेट करना मैं नेस्टेड व्यूमोडल्स के साथ एमवीवीएम पैटर्न का उपयोग कर एक एप्लिकेशन बनाने की कोशिश कर रहा हूं। मास्टर व्यूमोडेल शैलव्यू है जिसमें तीन उपयोगकर्ता नियंत्रण शामिल हैं, जिनमें से प्रत्येक अपने स्वयं के व्यूमोडेल के साथ है। ShellView ViewModel में बनाई गई है कोड-पीछे तो जैसे:उपयोगकर्ता नियंत्रण के डेटाकॉन्टेक्स्ट को पेरेंट व्यूमोडेल

public CustomerViewModel CustomerViewModel { get; set; } 

    public ContactsViewModel ContactsViewModel { get; set; } 

मैं UserControls की XAML से इन गुणों कैसे पहुँच सकता हूँ:

public ShellView() 
{ 
    InitializeComponent(); 
    _shellViewModel = new ShellViewModel(); 
    DataContext = _shellViewModel; 
} 

अब, मेरी ShellViewModel गुण के रूप में अन्य ViewModels शामिल? मैं कुछ ऐसा करने में सक्षम होना चाहूंगा:

DataContext="<<ParentWindowViewModel>.CustomerViewModel> 

मैं इसे कैसे पूरा कर सकता हूं? मैं पहले से ही करने की कोशिश की:

DataContext="{Binding DataContext.CustomerViewModel, RelativeSource={RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1}, Path=DataContext.CustomerViewModel}"> 

लेकिन डिबगर कहते हैं, "प्रकार 'वस्तु' की जिसे संदर्भ में संपत्ति 'CustomerViewModel' को हल नहीं कर सकते किसी भी मदद की सराहना की जाएगी

उत्तर

13

आप बस

DataContext="{Binding CustomerViewModel}" 
उपयोग करने के लिए की जरूरत है।।

आप अपने कन्स्ट्रक्टर में पहले ही DataContext = _shellViewModel; सेट कर चुके हैं, ताकि पूरे विंडो का डेटाकॉन्टेक्स्ट ShellViewModel पर सेट हो जाए, इसलिए जब आप बाइंडिंग को परिभाषित करते हैं, तो यह आपके द्वारा परिभाषित डेटाकॉन्टेक्स्ट में पथ की तलाश करता है। यही कारण है कि उपरोक्त बाध्यकारी मर्जी अपने ShellViewModel उदाहरण पर CustomerViewModel संपत्ति देखें।

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