2011-09-27 12 views
6

के साथ न्यूमेरिक टेक्स्ट बॉक्स मैंने WPF में कोड के साथ संख्यात्मक TextBox के कार्यान्वयन को देखा है। हम इसे MVVM पैटर्न में कैसे करते हैं?एमवीवीएम पैटर्न

उत्तर

4

ईमानदारी से - एमवीवीएम और न्यूमेरिक टेक्स्टबॉक्स में क्या समान है?

यदि आप एक संख्यात्मक टेक्स्टबॉक्स चाहते हैं तो आप एक नया टेक्स्टबॉक्स या संलग्नप्रोपर्टी या व्यवहार बनाते हैं। Here मास्क किए गए टेक्स्टबॉक्स व्यवहार के लिए एक उदाहरण है जिसका अर्थ है कि मेरा क्या मतलब है।

अब आपके एमवीवीएम भाग में। मुझे लगता है कि आप अपने इनपुट को केवल संख्यात्मक होने के लिए मान्य करना चाहते हैं। यदि आपके व्यूमोडेल में टाइप int की संपत्ति है, तो आपका बाध्यकारी केवल तभी काम करता है जब आपके दृश्य में इनपुट हो जो int में कनवर्ट करने योग्य हो। अन्यथा आपका व्यूमोडेल कभी सूचित नहीं किया जाएगा। अब 2 तरीके हैं:

पहले: आप सुनिश्चित करते हैं कि आपका दृश्य केवल संख्यात्मक इनपुट (आपके न्यूमेरिक टेक्स्टबॉक्स के साथ) ले सकता है और व्यूमोडेल प्रॉपर्टी int हो सकती है।

या दूसरा: आपका व्यूमोडेल प्रॉपर्टी टाइप टाइपऑफ स्ट्रिंग है और आप IDataErrorInfo का उपयोग करते हैं ताकि यह देखने के लिए कि इनपुट संख्यात्मक नहीं है।

+5

कारण में मैंने एमवीवीएम शामिल किया है, मैंने कार्यान्वयन देखा जहां पूर्वावलोकन कुंजी घटना का उपयोग कोड में किया जा रहा है। मैं बस उन उत्तरों को खत्म करना चाहता हूं – katie77

+0

@ ब्लीमेमेइस, क्या मैं उस लॉल पर अनुवाद कर सकता हूं –

0

अच्छा ... यदि आप अपने व्यूमोडेल में अधिसूचित होना चाहते हैं, तो संख्यात्मक टेक्स्टबॉक्स की टेक्स्ट प्रॉपर्टी बस इसमें बाध्य होती है। यदि संख्यात्मक टेक्स्टबॉक्स की .Text संपत्ति एक निर्भरता संपत्ति नहीं है तो कोडर थप्पड़ मारो!

इस एक: http://wpftoolkit.codeplex.com/wikipage?title=DecimalUpDown&referringTitle=Home

मैं सिफारिश कर सकते हैं और आप के माध्यम से viewmodel से यह करने के लिए बाध्य कर सकते हैं:

<!-- View: --> 
<NumericTextBox Text="{Binding MyViewModelTextStringProperty}" /> 
//ViewModel: 
public string MyViewModelTextStringProperty 
{ 
    get/set with NotifyPropertyChanged.... 
} 
1

MVVM के मानक परिभाषा के अनुसार यदि आप एक के पीछे एक ViewModel नहीं चाहते हैं कस्टम नियंत्रण। आपको बस टेक्स्टबॉक्स नियंत्रण का विस्तार करना चाहिए और सुनिश्चित करना चाहिए कि केवल संख्यात्मक इनपुट दर्ज किया गया हो। आपको एक निर्भरता प्रॉपर्टी भी जोड़नी चाहिए जो संख्यात्मक इनपुट देता है।

व्यूमोडेल तब आएगा जब उस नियंत्रण का उपयोग खिड़की या समग्र नियंत्रण में किया जाता है। आप टेक्स्ट या न्यूमेरिक निर्भरता प्रॉपर्टी को अपने व्यूमोडेल में सार्वजनिक संपत्ति में बाध्य करेंगे।

0

यदि आप वास्तव में ViewModel में ऐसा करना चाहते हैं, तो आपको अपनी बाध्य संपत्ति को एक स्ट्रिंग बनाना होगा। सुनिश्चित करें कि प्रत्येक कीस्ट्रोक पर बाध्यकारी अपडेट (UpdateSourceTrigger का उपयोग करके)।

अपने सेटर में, अपवाद बढ़ाने या गैर-संख्यात्मक वर्णों को ट्रिम करके गैर-संख्यात्मक मानों को अस्वीकार करें। बाद के दृष्टिकोण में कॉपी/पेस्ट ऑपरेशंस के लिए काम करने का लाभ होता है जहां पेस्ट किए गए टेक्स्ट में अंक और अक्षरों का मिश्रण हो सकता है, लेकिन केवल अंक बनाए रखा जाना चाहिए।

कहा जा रहा है कि, मैं उन अन्य सुझावों से सहमत हूं जिनके पास एक विशेष नियंत्रण है जो केवल संख्यात्मक संपत्ति का खुलासा करता है, एक क्लीनर दृष्टिकोण है।

सम्मान,

एरिक।

4

डब्ल्यूपीएफ में यदि आप टेक्स्टबॉक्स को एक दशमलव या एक इंट संपत्ति में बांधते हैं तो यह केवल उस int या दशमलव को स्वीकार करेगा अन्यथा यह एक लाल सीमा दिखाएगा कि बाध्यकारी में इसका उचित मूल्य नहीं है। और यदि आप संख्यात्मक अद्यतन टेक्स्टबॉक्स के बारे में बात कर रहे हैं तो यह आसानी से here

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