के साथ WPF डिज़ाइन डेटा का उपयोग करके मैं व्यापक WP परीक्षण के लिए हमारे WPF अनुप्रयोग में एमवीवीएम पैटर्न का उपयोग कर रहा हूं। एमवीवीएम पैटर्न स्वयं बहुत अच्छा काम कर रहा है, हालांकि मैं पैटर्न को इस तरह अनुकूलित करने के लिए संघर्ष कर रहा हूं जिसका मतलब है कि मैं डब्ल्यूपीएफ के डिजाइन-टाइम डेटा सपोर्ट का उपयोग कर सकता हूं।एमवीवीएम पैटर्न
जैसा कि मैंने प्रिज्म उपयोग कर रहा हूँ ViewModel उदाहरणों आम तौर पर की तरह तो ViewModel के लिए
public MyView(MyViewModel viewModel)
{
DataContext = viewModel;
}
निर्भरता तो निर्माता में इंजेक्ट किया जाता है, देखने के निर्माता में इंजेक्ट किया जाता है, ताकि
public class MyViewModel
{
public MyViewModel(IFoo foo, IBar bar)
{
// ...
}
// Gets and sets the model represented in the view
public MyModel { get; set; }
// Read-only properties that the view data binds to
public ICollectionView Rows { get; }
public string Title { get; }
// Read-write properties are databound to the UI and are used to control logic
public string Filter { get; set; }
}
की तरह
यह आमतौर पर डिज़ाइन डेटा की बात करते समय वास्तव में अच्छी तरह से काम कर रहा है - मैं अपने रिलीज़ असेंबली में डिज़ाइन-डेटा विशिष्ट कक्षाओं को संकलित करना चाहता था और इसलिए मैंनेके बजाय {d:DesignData}
दृष्टिकोण का उपयोग करने का विकल्प चुनादृष्टिकोण, हालांकि इसके लिए सही ढंग से काम करने के लिए मेरे व्यूमोडेल को अब पैरामीटर रहित कन्स्ट्रक्टर होना चाहिए। इसके अतिरिक्त, XAML में इन गुणों को सेट करने में सक्षम होने के लिए, मुझे अक्सर अतिरिक्त गुणों को बदलने के लिए सेटर्स या संशोधित संग्रह होने की आवश्यकता होती है।
public class MyViewModel
{
public MyViewModel()
{
}
public MyViewModel(IFoo foo, IBar bar)
{
// ...
}
// Gets and sets the model represented in the view
public MyModel { get; set; }
// My read-only properties are no longer read-only
public ObservableCollection<Something> Rows { get; }
public string Title { get; set; }
public string Filter { get; set; }
}
यह मैं चिंता है:
- मैं एक parameterless निर्माता है कि कहा जा करने का इरादा कभी नहीं और है नहीं इकाई का परीक्षण किया
- संपत्तियों के लिए setters हैं कि केवल ViewModel ही चाहिए
- मेरा व्यूमोडेल अब गुणों का एक झुका हुआ मिश्रण है जिसे दृश्य द्वारा संशोधित किया जाना चाहिए, और जो नहीं करना चाहिए - इससे यह एक नज़र में बताने में मुश्किल हो जाती है कि किसी भी दिए गए गुण को बनाए रखने के लिए कोड का टुकड़ा ज़िम्मेदार है
- डिज़ाइन समय पर कुछ गुण सेट करना (उदा।
Filter
पाठ पर स्टाइल देखने के लिए) वास्तव में ViewModel तर्क का आह्वान कर सकते हैं!
(तो मेरे ViewModel भी डिजाइन समय में लापता जा रहा है अन्यथा अनिवार्य निर्भरता tollerant करने की आवश्यकता है) वहाँ एक रास्ता है कि समझौता नहीं करता है में एक WPF MVVM आवेदन में डिजाइन समय डेटा प्राप्त करने के लिए एक बेहतर तरीका है मेरी इस तरह से ViewModel?
वैकल्पिक रूप से मुझे अपना व्यूमोडेल अलग-अलग बनाना चाहिए ताकि इसमें कहीं और अलग तर्क के साथ अधिक सरल गुण हो।
यह मेरे लिए थोड़ा अजीब बात है कि आपके वीएम के बाद आपके विचारों पर निर्भरता है। –
@ ग्रेगडी, मेरे लिए नहीं। मुझे यह मॉडल प्राप्त करने में सक्षम होना चाहिए कि मैं डेटा पूछताछ कर सकता हूं, गेटर्स/सेटर्स को उजागर करके किसी भी बाहरी "दृश्य" को प्रस्तुत किए जा सकने वाले झंडे सेट कर सकता हूं। मैं बस इतना कह रहा हूं कि इस उदाहरण में, इसे दृश्य की आवश्यकता नहीं है, लेकिन अगर मैं एक लॉन्च करना चाहता हूं, तो प्रत्येक व्यू मॉडल का अपना उद्देश्य है, जैसे रखरखाव स्क्रीन, लेनदेन हेडर/विस्तार प्रसंस्करण, जो भी हो। यदि कोई प्रासंगिक दृश्य है, तो मेरे पास सिर्फ हुक कहना है ... इस एमवीवीएम हैंडलर से जुड़े दृश्य को कॉल करें। – DRapp
तो इस दृष्टिकोण के साथ डिज़ाइन-टाइम डेटा कैसे काम करता है? – Justin