मुझे अपने डब्ल्यूपीएफ एमवीवीएम (प्रिज्म आधारित) एप्लिकेशन में कुछ डिज़ाइन प्रश्नों का सामना करना पड़ रहा है, आपकी सलाह लेने में खुशी होगी। मेरे मॉडल बहुत सरल है:मॉडल में बदलकर INotifyProperty जोड़ना?
public class Customer
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
आप देख सकते हैं, मैं अपने मॉडल वर्ग के लिए किसी भी INotifyPropertyChnaged का समर्थन नहीं है। मेरे पास ग्राहक विवरण स्क्रीन के लिए व्यूमोडेल भी है, जो INotifyPropertyChanged का समर्थन करता है।
public class CustomerDetailsViewModel:INotifyPropertyChanged /*Or NotificationObject*/
{
/*INotifyPropertyChanged event */
private Customer item;
public Customer Item
{
get{return item;}
set
{
item=value;
//Raise PropertyChanged
//Set IsDirty to true
}
}
}
मेरे विचार में, मैं आइटम पर बाध्यकारी का उपयोग कर रहा हूं। फर्स्टनाम और मेरा व्यू मॉडेल अपडेट किया जा रहा है। मेरी समस्या यह है - चूंकि केवल फर्स्टनाम संपत्ति को व्यू के माध्यम से अपडेट किया जा रहा है, और मॉडल स्वयं इनोटिफ़ाईप्रॉपर्टी का समर्थन नहीं करता है, इसलिए आइटम सेटटर नहीं कहा जा रहा है, और IsDirty झूठ के बराबर रहता है (और इसलिए IsDirty अधिसूचना को अद्यतन नहीं करता है यूआई पर)।
मैं जानता हूँ कि मैं मॉडल में INotifyPropertyChanged समर्थन कर सकते हैं और उसके बाद दृश्य मॉडल में Item.PropertyChanged घटना रजिस्टर, और वास्तव में सच करने के लिए IsDirty निर्धारित करते हैं, लेकिन - जब से मैं भी CodeFirst, और मेरे मॉडल का उपयोग कर रहा क्लास मेरे सर्वरसाइड और मेरे क्लाइंट साइड (सेवा जोड़ें संदर्भ का उपयोग नहीं कर रहा है) के बीच साझा किया गया है, मैं अपने सर्वर पक्ष में INotifyPreoprtyChanged सामान को जोड़ना नहीं चाहता हूं।
मैं नई परियोजना बनाने पर विचार कर रहा हूं, जो मेरी सभी इकाइयों (ग्राहक के रूप में) एक को प्रतिलिपि बनाने और प्रत्येक मॉडल को INOTifyPropertyChanged समर्थन जोड़ने के लिए टी 4 टेम्पलेट का उपयोग करेगा। क्या ऐसा कुछ है जो उचित लगता है या नहीं? कोई अन्य सुझाव?
धन्यवाद!
मैं समझता हूँ कि आप क्या कह रहे हैं का समर्थन करेंगे, लेकिन यह (लगभग) कोई कारण नहीं के लिए कोडिंग के बहुत सारे की आवश्यकता होगी। क्या मुझे अपने मॉडल मॉडल में मेरे मॉडल की हर संपत्ति को डुप्लिकेट करना चाहिए ??? – Asaf
@ एसाफ आप सही हैं। मैं आपकी परियोजना को नहीं जानता। यदि यह सिर्फ एक छोटा सा है, तो यह एक बड़ा ओवरहेड हो सकता है। लेकिन बड़ी परियोजनाओं में, जब आपके पास टेस्टेबिलिटी जैसी अतिरिक्त आवश्यकताएं होती हैं, तो डी.एस.ओ. यह उन्हें प्राप्त करने का एक तरीका होगा। – DHN