WPF

2013-02-18 11 views
5

में एमवीवीएम में व्यूमोडेल के बीच मूल्यों को पास करना मैं एमवीवीएम लाइट टूल किट का उपयोग कर डब्ल्यूपीएफ एप्लीकेशन विकसित कर रहा हूं। मेरे मेनविंडो में एक डाटाग्रिड है। मैंने "ओपनफाइल" और उनके व्यूमोडल्स नामक एक और विंडो बनाई है। मुख्य विंडो व्यूमोडेल क्लास में सार्वजनिक संपत्ति है प्रकार का अवलोकन करने योग्य चयन माइलिस्ट जो डाटाग्रिड से जुड़ा हुआ है। क्या मैं इस संपत्ति को ओपनफाइल व्यूमोडेल से भर सकता हूं और स्वचालित रूप से डाटाग्रिड से बांध सकता हूं? या क्या मैं मेनव्यूमोडेल के लिए एक व्यवहार्य पास कर सकता हूं और OpenfileViewmodel से MainViewmodel में सार्वजनिक फ़ंक्शन में कॉल कर सकता हूं?WPF

यह है कि मैं मेनू बार से MyPage को कैसे कॉल कर रहा हूं।

private void NotificationMessageReceived(NotificationMessage msg) 
     { 
      switch (msg.Notification) 
      { 
       case Messages.MainVM_Notofication_ShowNewbWindow: 
        new NewView().ShowDialog(); 
        break; 
       case Messages.MainVM_Notofication_ShowExistingWindow: 
        new OpenExisitingView().ShowDialog(); 
        break; 

       case Messages.MainVM_Notofication_ShowotherWindow: 
        newView().ShowDialog(); 
        break; 
      } 
     } 

अग्रिम में धन्यवाद। उसके बाद

public class OpenFileViewModel 
{ 
    private MainWindowViewModel _parent; 

    public OpenFileViewModel(MainWindowViewModel parent) 
    { 
      _parent = parent; 
    } 
} 

आप/कॉल कर सकते हैं MainWindowViewModel में किसी भी सार्वजनिक विधि/संपत्ति का उपयोग: के बाद

foreach (var item in _parent.myList) 
{ 
    ... 
} 
+0

आप परिदृश्य आप का वर्णन कर रहे हैं के लिए कुछ उदाहरण कोड प्रदान करने में सक्षम होगा? यदि माईलिस्ट पहले से ही डाटाग्रिड से जुड़ा हुआ है, तो सूची में किसी भी अपडेट को स्वचालित रूप से आपके ग्रिड को अपडेट करना चाहिए। यदि माईलिस्ट एक सार्वजनिक संपत्ति है, और खुली फ़ाइल वीएम में आपके मुख्य वीएम का संदर्भ है तो आपको इसे सीधे पॉप्युलेट करने में सक्षम होना चाहिए। – Dutts

+0

आप 'ओपनफाइल' दृश्य कैसे खोलते हैं? –

+0

मैं मेनू बार से ओपनफाइल विंडो खोल रहा हूं। –

उत्तर

1

सबसे आसान तरीका है OpenFileViewModel करने के लिए 'MainWindowViewModel रों उदाहरण पारित करने के लिए है थोड़ा सा शोध मुझे निम्नलिखित कोड द्वारा मेरे मेनव्यूमोडेल का वर्तमान उदाहरण मिला।

MainViewModel mainViewModelInstaince = ServiceLocator.Current.GetInstance<MainViewModel>(); 

तब मुझे सभी विधियों और गुणों को मिला ... और डेटा को किसी अन्य व्यूमोडेल से बाध्य किया गया।

सब करने के लिए धन्यवाद ..

1

आप एक वर्ग है जो अपने "मध्यस्थ सेवा" हो सकता है बना सकते हैं और इसे अपने ViewModels के बीच बैठेंगे। आप अपनी मध्यस्थ सेवा पंजीकृत कर सकते हैं और उन कार्यक्रमों को जोड़ सकते हैं जिन्हें आप एक वीएम से उठा सकते हैं और दूसरे में संभाल सकते हैं। यह हो सकता है की तरह:

public class MediatorService: IMediatorService 
{ 
    public dynamic Data { get; set;} 
    public event EventHandler<YourCustomEventArgs> Callback = delegate { } 
} 

public class XYZVM(IMediatorService mediatorService) 
{ 
// set your Data here and handle Callback event here and refresh your grid. 
// you can get anything from your "YourCustomEventArgs" which you will set from ABCVM 
} 

public class ABCVM(IMediatorService mediatorService) 
{ 
// get your data here and raise callback here and handle that in XYZVM 
} 

आशा इस मदद आप ..

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