उत्तर के लिए धन्यवाद। अब मैंने अपना संदेश दोबारा पढ़ लिया है, मुझे लगता है कि यह अस्पष्ट है। मेरे पास एक ऐसी स्क्रीन है जो किसी ऑब्जेक्ट को संपादित करती है जिसमें अन्य बाल ऑब्जेक्ट्स की कई सूचियां होती हैं। मैंने इन्हें टैब नियंत्रण में अलग-अलग टैब के रूप में लागू किया है। इनमें से एक टैब टिप्पणियों को संपादित करता है, इसलिए मैं सूची के बगल में वर्तमान चयन के लिए एक संपादन पैनल के साथ टिप्पणियों की एक सूची प्रदर्शित करना चाहता था। उपयोगकर्ता सूची को अद्यतन करने के लिए बटन जोड़, संपादित या हटा सकता है। मैं इसे शुद्ध (आईएसएच) एमवीवीएम तरीके से करना चाहता था।
मैं निम्नलिखित डिजाइन जो कम से कम हैक्स के साथ काम करने लगता है के साथ आया था।
व्यू में व्यूमोडेल के भीतर एक अवलोकन संग्रह के लिए एक सूची दृश्य के रूप में आसानी से बाल वस्तुओं की एक सूची शामिल है। मैंने एक बाल ऑब्जेक्ट बफर शामिल किया - इसका उपयोग तब तक परिवर्तनों को बफर करने के लिए किया जाता है जब तक वे सूची में वापस सहेजने के लिए तैयार नहीं होते (या फेंक दिए जाते हैं)।
व्यू में व्यूमोडेल में बफर ऑब्जेक्ट से जुड़ा एक संपादन पैनल भी शामिल है। जब भी सूची दृश्य का वर्तमान चयन गहरी प्रति का उपयोग कर बदलता है तो बफर अपडेट किया जाता है। मैंने चयनितिटम संपत्ति पर डेटा बाध्यकारी का उपयोग करने की कोशिश की लेकिन सेट को कभी नहीं बुलाया गया था, इसलिए चयन को बदलने पर संपत्ति को अद्यतन करने के लिए मजबूर करने के लिए एक छोटी कोड-बैक विधि जोड़ा गया था।
सूची दृश्य और संपादन दृश्य परस्पर अनन्य हैं। सिद्धांत रूप में आप एक फ्लिप स्क्रीन का उपयोग कर अक्षम विकलांग को छुपा सकते हैं। एक सामान्य पैटर्न के रूप में, मेरे ऐप के लिए एक ही समय में दोनों दृश्यमान होने के लिए बेहतर है क्योंकि संपादन पैनल सूची दृश्य में दिखाए गए अतिरिक्त जानकारी दिखा सकता है। जिस पैनल को सक्षम किया गया है, उसे IsEnabled को IsEnitCommentMode जैसे ViewModel प्रॉपर्टी पर बाध्यकारी द्वारा नियंत्रित किया जाता है।
सूची प्रबंधित करने के लिए आदेश जोड़े जाने हैं, ये नए, संपादन और हटाए गए हैं। ध्यान दें कि जोड़ें और संपादित करें बफर सेट अप करेगा, फिर IsEditCommentMode को सत्य पर सेट करें। ये सूची प्रबंधन आदेश केवल तभी उपलब्ध होते हैं जब IsEditCommentMode गलत है। संपादन पैनल उपकरण सहेजें और रद्द करें आदेश लागू करता है, वे केवल सक्षम हैं जब IsEditCommentMode सत्य है। जब सेव निष्पादित किया जाता है, तो उसे बफर से सूची में कॉपी करना चाहिए (या तो जोड़ें या अपडेट करें) और परिवर्तन अधिसूचना को आग लगाना चाहिए। अंत में, इसे IsEditCommentMode को गलत पर सेट करना चाहिए।
यह सब अच्छी तरह से काम करता है और ऐसा लगता है कि किसी भी एमवीवीएम किरायेदारों (मेरी नम्र लेकिन अक्सर त्रुटिपूर्ण राय में) का उल्लंघन नहीं होता है।