2010-12-28 11 views
5

मैं WPF & एमवीवीएम दुनिया के लिए काफी नया हूं, और पिछले कुछ दिनों में जितना संभव हो उतना ट्यूटोरियल डाउनलोड कर रहा हूं, और जितना संभव हो सके पढ़ रहा हूं!एमवीवीएम - मैं किसी सूची से किसी चयनित आइटम के आधार पर एक विंडो कैसे खोलूं?

मैं तथापि MVVM के साथ एक बहुत ही बुनियादी और आम अवधारणा के साथ लागू करने और कुछ मदद के लिए बेताब हूँ के लिए संघर्ष कर रहा हूँ -, शायद यह भी एक उदाहरण है और :-)

मैं MVVM की मूल बातें मिल गया है कमांडिंग , और यहां तक ​​कि messenging; लेकिन मार्च पर कैसे मैं एक नई विंडो खोलता हूं और उस विंडो को व्यूमोडेल को किसी सूची बॉक्स के चयनित आइटम पर सेट करता हूं?

मुझे स्पष्ट करने दें: मैं एक मॉडल ग्राहक कहा जाता है और यह कुछ गुण है मैं तो एक ViewModel जो एक ObservableCollection में अपने सभी ग्राहकों के लिए और उन्हें स्टोर हो जाता है मैं एक स्क्रीन जहाँ मैं नाम में & उपनाम प्रदर्शित होता है एक सूची बॉक्स और उपयोगकर्ता को फ़िल्टर और खोज करने की अनुमति देता है।

उपरोक्त सभी कार्य पूरी तरह से काम करते हैं।

जब कोई उपयोगकर्ता कोई आइटम चुनता है, तो मैं उस विशेष ग्राहक के संपादन योग्य "विस्तृत ग्राहक दृश्य" स्क्रीन को खोलना चाहता हूं। इस विस्तृत स्क्रीन के व्यूमोडेल को किसी भी तरह से चयनित आइटम से बांधना होगा (यदि यह समझ में आता है); या मुझे नई खुली स्क्रीन के व्यूमोडेल में एक पैरामीटर पारित करने में सक्षम होना चाहिए। वास्तव में, यदि उपयोगकर्ता एक ही समय में कई विस्तार स्क्रीन खोल सकता है और एकाधिक क्लिनट संपादित कर सकता है तो यह बहुत अच्छा होगा!

यदि कोई मुझे एक अच्छा उदाहरण दे सकता है, या मुझे सही दिशा में इंगित करता है तो मैं वास्तव में बहुत अच्छा होगा!

बहुत धन्यवाद, ब्रेंडन

उत्तर

2

मैं जो निम्नलिखित करता ListBox.SelectionChanged में ईवेंट जोड़ने होगा:

  • बनाता है एक नया संवाद और DialogViewModel
  • को DialogViewModel.EditableContentProperty बांधता ListBox's SelectedItem
  • Dialog.DataContext = DialogViewModel
  • संवाद .ShowDialog()
+0

धन्यवाद राहेल, मैं एक तरह से सही आ गए हैं। मैंने अपने DetailViewModel के लिए एक कन्स्ट्रक्टर बनाया है और इसे सूची दृश्य डबल कोड पर कोड-बैक में DetailForms डेटाकॉन्टेक्स्ट पर बाध्य कर दिया है। मैंने स्पष्ट रूप से "क्लिक नहीं किया" था कि कोई इस तरह कोड में व्यूमोडेल बना और बांध सकता है ... – Brendan

+0

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

+0

भले ही आप इसे पूरी तरह से ViewModels में करना चाहते हैं, मैं इसे एक समान तरीके से करूँगा। मुख्य अंतर ListBox होगा। चयनChanged एक ViewModel कमांड को इंगित करेगा और कोड कोड के बजाय वीएम में होगा। – Rachel

2

सीधे शब्दों में कहें:

//Create the Client Detail form 
frmClientDetails frm = new frmClientDetails(); 
frm.Owner = this; 
var ViewModel = new ClientDetailViewModel((Client)lstFoundClients.Items.CurrentItem); 
frm.DataContext = ViewModel; 
frm.Show(); 
संबंधित मुद्दे