2010-05-21 12 views
7

ऐसा लगता है कि एमवीवीएम पैटर्न में एक्सएएमएल को संदेशबॉक्स पॉप-अप करने में कठिनाई है। मेरा ग्राहक जोर देता है कि सत्यापन लेबल और रंग उनके लिए अच्छे नहीं हैं। वे अभी भी एक संदेश बॉक्स चाहते हैं। यह कैसे कर सकता हैएमवीवीएम में संदेशबॉक्स का उपयोग कैसे करें?

मुझे पता है कि मैं व्यू-मॉडल में संदेशबॉक्स पॉप-अप कर सकता हूं, लेकिन यह दृश्य-मॉडल के लिए पूरे उद्देश्य का उल्लंघन करता है। मैं कुछ अपवाद हैंडलर में एक त्रुटि भी बढ़ा सकता हूं, और एक संदेशबॉक्स पॉप-अप कर सकता हूं, लेकिन संदेशबॉक्स अपवाद नहीं है। यह सामान्य कार्यक्रम प्रवाह का हिस्सा है।

क्या एक्सएएमएल में ऐसा करने का कोई अच्छा तरीका है? मेरा ग्राहक संदेशबॉक्स पसंद करता है। उसे एमवीवीएम पैटर्न की परवाह नहीं है, एमवीवीएम और यूनिट टेस्ट का उपयोग करने से पहले उसे कभी भी कोई गुणवत्ता समस्या नहीं थी। लेकिन अब, वह अपने संदेश बॉक्स भी नहीं प्राप्त कर सकती है, इसलिए वह बहुत खुश नहीं है।

उत्तर

1

आप अपने ViewModel जो दृश्य द्वारा नियंत्रित किया जाएगा संदेश बॉक्स दिखाने के लिए एक PopUpNotificationRequested घटना हो सकती है। इस तरह संदेशबॉक्स दिखाने के लिए तर्क व्यूमोडेल में रहता है, लेकिन अभी भी दृश्य से decoupled है।

+0

आपको बहुत बहुत धन्यवाद। लेकिन मैंने "PopUpNotificationRequested" के लिए Google खोज की और मुझे कुछ भी नहीं मिला। एक और बात: यदि मैं "PopUpNotificationRequested" का उपयोग करता हूं, तो भी मैं सीधे यूआई को छू रहा हूं, क्या यह एमवीवीएम पैटर्न का उल्लंघन करता है? – BigTiger

2

एक संभावना

public interface IMessageBoxProvider 
{ 
    MessageBoxResult Show(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult); 

} 

और एक आवरण वर्ग कि इस इंटरफेस को लागू करता है और एक सामान्य या कस्टम messagebox का उपयोग करता है की तरह messagebox के लिए एक इंटरफेस का प्रयोग है। viewmodel में आप तो इस

private IMessageBoxProvider MessageBox { get; set; } 

जहां MessageBox आवरण वर्ग है की तरह उपयोग कर सकते हैं। तो अब आपने वास्तविक संदेशबॉक्स को डीकॉप्ल किया है और इसलिए आप इकाई परीक्षण और क्या नहीं कर पाएंगे।

0

कुछ हफ्ते पहले मैं इस समस्या में भाग गया। मैं इस आलेख में आया (http://blog.roboblob.com/2010/01/19/modal-dialogs-with-mvvm-and-silverlight-4/) और एमवीवीएम पैटर्न के साथ मोडल संवाद दिखाने के लिए अनिवार्य रूप से एक बहुत ही समान प्रक्रिया का पालन किया। मेरे व्यू मॉडल्स का परीक्षण करने के लिए बस एक नकली मोडल संवाद सेवा बनाएं। मुझे उम्मीद है कि यह आपको भी मदद करता है।

1

WPF Application Framework (WAF) परियोजना के ViewModel नमूना आवेदन MVVM पैटर्न उल्लंघन करने के बिना एक संदेशबॉक्स दिखाने के लिए कैसे पता चलता है।

2

Josh Smith भी एक CodeProject लेख है कि आप here रुचि हो सकती है है।

संबंधित मुद्दे