मेरे सेटिंग के रूप में नीचे वर्णित है एक डिफ़ॉल्ट बटन के साथ एक संवाद पर दर्ज संपत्ति को अपडेट नहीं करता:डाटा बाध्यकारी जब दबाने
- WPF 4 आवेदन
- MVVM लाइट ढांचे
- एक "जोड़ें आइटम "संवाद मोड में मुख्य विंडो के शीर्ष पर दिखाया गया है (view.ShowDialog();
- संवाद में कई इनपुट फ़ील्ड हैं, और" सहेजें "बटन है जिसमें यह है IsDefault गुण True पर सेट है
- "सहेजें" बटन हाथ है नेतृत्व का उपयोग कर एक एक कमान
- डेटा बाइंडिंग देखने के XAML में इनपुट के खेतों और ViewModel में इसी गुण के बीच परिभाषित किया गया है के लिए बाध्य (एक तरह से, यूआई के लिए मोड = OneWayToSource साथ ViewModel, अद्यतन करने के लिए)
समस्या यह है कि जब मैं कीबोर्ड पर एंटर दबाता हूं, तो अंतिम इनपुट फ़ील्ड में जो मान मैंने प्रदान किया है वह ViewModel की अंतर्निहित संपत्ति को धक्का नहीं दिया जाता है।
मुझे संदेह है कि इस तथ्य के साथ कुछ करने के लिए है कि विंडो बंद होने से पहले इनपुट फ़ील्ड फोकस नहीं खो गया है (और इस प्रकार सभी बाइंडिंग "भंग हो गए हैं")। तुलना के लिए, यदि मैं पर क्लिक करें "सहेजें" बटन (इसके क्लिक को विंडो पर एंटर पर संभालने की बजाय), संपत्ति में अपडेट किया गया है। इसके अलावा, अगर मैं बटन के क्लिक इवेंट में एक इवेंट हैंडलर (डरावनी! डरावनी!) जोड़ता हूं, और कोड बटन पर फोकस() कॉल करता हूं, तो सबकुछ काम करता है!
उपाय क्या हो सकता है?
मैं स्पष्ट रूप से किसी भी खिड़की बंद करने के ईवेंट प्रबंधित नहीं करना चाहते हैं, और "मैन्युअल" लापता मूल्यों लाने ... इस
कोई बेहतर सुझाव :-(पूरे MVVM अवधारणा का उल्लंघन होगा?
धन्यवाद, एलेक्स
मुझे कई अन्य भाषाओं में भी इसी व्यवहार का सामना करना पड़ा है, विशेष रूप से डेल्फी (मुझे लगता है कि हेजल्सबर्ग ने यह एक विशेषता नहीं माना - अगर वह डब्ल्यूपीएफ के लिए भी जिम्मेदार था)। यदि आप किसी संख्या से जुड़ते हैं तो PropertyChanged विकल्प में समस्याएं होती हैं, क्योंकि यह "3." को सत्यापित करने का प्रयास करेगी जैसा कि आप पीआई में टाइप करते हैं और अपवाद उठाते हैं। मुझे बटन पर कोई फर्क नहीं पड़ता। फोकस() विकल्प क्योंकि यह सभी नियंत्रणों के साथ काम करेगा और भावी सबूत संवाद भी करेगा। –