आपके द्वारा दिए गए ग्राहक उदाहरण में, ग्राहक मॉडल में आपके डेटाबेस (या अन्य बैकएंड) द्वारा संग्रहीत सभी जानकारी शामिल है। ग्राहकव्यूमोडेल में यूआई (नाम इत्यादि, यदि आपके पास बड़ी कक्षा है तो संभावित रूप से 50 अन्य गुणों पर दिखाया जा रहा है) पर समान जानकारी है, लेकिन इन्हें उन गुणों के रूप में दिखाने के लिए INotifyPropertyChanged इंटरफ़ेस का उपयोग करता है जो दृश्य (यानी XAML) कर सकते हैं से बंधा।
उदा। दृश्यता झंडे, वर्तमान टैब सूचकांक, कई क्षेत्रों में डेटा से बाहर बनाया पाठ के और अधिक जटिल बिट्स, ObservableCollection बच्चे मदों की < >, आदि सभी वहाँ के लिए कर रहे हैं -
public int Name
{
get
{
return this.name;
}
set
{
if (this.name!= value)
{
this.name= value;
this.OnPropertyChanged("Name");
}
}
}
ViewModel भी यूआई राज्य के अन्य बिट्स शामिल एक्सएएमएल से बंधे रहें।
मैंने मॉडल से बनाई गई व्यूमोडेल को एक बार, एक तरफा प्रक्रिया, उदाहरण के रूप में देखा है। एक निर्माता के साथ:
CustomerViewModel viewModel = new CustomerViewModel(customer);
या एक विस्तार विधि
CustomerViewModel viewModel = customer.ToViewModel();
मैं मॉडल में परिवर्तन के लिए एक ViewModel अद्यतन करने के लिए किसी भी प्रावधान नहीं देखा है के रूप में - ViewModel की बात है कि यह से अलग है आदर्श। यह डेटा की एक अलग प्रति रखता है। जब तक आप "सेव" बटन दबाएंगे, तब तक यह मॉडल में बदलावों का प्रचार नहीं करता है। तो यदि आप इसके बजाय रद्द करते हैं, मॉडल में कुछ भी नहीं बदला है और पूर्ववत करने के लिए कुछ भी नहीं है।
आप मॉडल के साथ व्यूमोडेल को अद्यतित रखने के लिए बहुत मेहनत कर रहे हैं - अधिकांश मामलों जैसे सहेजने या लोड करने के लिए आप वर्तमान व्यू मॉडेल को फेंक सकते हैं और मॉडल की वर्तमान स्थिति से नया बना सकते हैं। क्या आपको ViewModel के UI स्थिति को रखने और उसमें डेटा बदलने की आवश्यकता है? यह एक आम आवश्यकता नहीं है लेकिन इसे सहेजने या लोड होने पर एक विधि या दो के साथ किया जा सकता है।
तो यह भी माना जाता है कि यह वायर-अप तर्क कहीं होता है। यही कारण है कि अधिकांश पैटर्न जिनमें विचार शामिल हैं नियंत्रक जो आदेशों पर कार्य करने के लिए ज़िम्मेदार हैं (उदा। ग्राहक दिखाएं, ग्राहक को बचाएं) और बाद में नया यूआई राज्य स्थापित करें।
यदि आप मॉडल से अलग व्यूमोडेल रखते हैं तो मॉडल में कोई नियम कैसे लागू होते हैं? मान लें कि मेरे पास मात्रा और मूल्य वाला मॉडल है। यदि मैं व्यूमोडेल पर मात्रा बदलता हूं जो मॉडल के माध्यम से बहती है जो नई मात्रा के आधार पर मान अपडेट करती है। अब ViewModel को नया मान दिखाना चाहिए। –
"अगर मैं व्यूमोडेल पर मात्रा बदलता हूं जो मॉडल के माध्यम से बहती है" नहीं, जब तक कि आप एक सेव बटन दबाएं या नहीं। जब आप करते हैं, उसके लिए हैंडलर मॉडल को अद्यतन करना चाहिए, इसे जारी रखें और नए मॉडल स्थिति से नया व्यूमोडेल बनाएं। – Anthony
तो यदि यह मॉडल के माध्यम से बहता नहीं है, तो ViewModel को कभी भी एक अद्यतन मान फ़ील्ड कैसे मिलता है? यदि मैं मात्रा बदलता हूं, तो उपयोगकर्ता के रूप में मैं नया मान देखने की उम्मीद करता हूं। एमवी में कैल्क वैल्यू के लिए व्यवसाय तर्क नहीं है, केवल मॉडल करता है। –