wpf - Bind an event of a slider control -


दृश्य में ( AudioView.xaml ) मैंने निम्न कोड लिखा है < पूर्व> & lt; स्लाइडर नाम = "ऑडियोस्लाइडर" चौड़ाई = "200" ऊँचाई = "23" ग्रिड। कॉलम = "0" हैइससेक्शनरेंजएनेटेड = "ट्रू" आईएसएनपोटोटिकएन्टेड = "ट्रू" अधिकतम = "{बाध्यकारी पथ = कुलऑडियो प्लेलिंगसैकंड मोड = OneTime} "न्यूनतम =" 0 "शैली =" {StaticResource CustomStyleForSlider} "Thumb.DragCompleted =" {बाध्यकारी AudioSliderChangedCommand} "TickFrequency =" 1 "मान =" {बाध्यकारी पथ = ऑडियोपाषाण} "/ & gt;

नोट: इसमें फ़ाइल AudioView.xaml.cs भी है।

दृश्य मॉडल वर्ग ( AudioViewModel.cs ) में मैंने निम्न संपत्ति को परिभाषित किया है

  सार्वजनिक ईवेंट DragCompletedEventHandler AudioSliderChangedCommand;   

और मॉडल मॉडल के निर्माता ( AudioViewModel.cs ) में

  this.AudioSliderChangedCommand = नया DragCompletedEventHandler (OnAudioSliderChanged) ;   

संकलन के दौरान मुझे निम्नलिखित त्रुटि हो रही है

त्रुटि 8 ड्रैग कॉम्पलेटेड = "{बाध्यकारी ऑडियो स्लिपर्ड कॉमांड}" मान्य नहीं है। {बाध्यकारी ऑडियो स्लिपर्ड कॉमांड} एक वैध ईवेंट हैंडलर पद्धति नाम नहीं है। उत्पन्न या कोड-पीछे वर्ग पर केवल इंस्टेंस विधियां मान्य हैं।

समस्या है आपके कोड में पीछे नहीं है, लेकिन आपके एक्सएएमएल में कहीं भी आप ऐसा करते हैं:

  ड्रैग कॉम्पलेटेड = "{बाध्यकारी ऑडियो स्लिपर्ड कॉमांड}"   

यह XAML deserializer को AudioSliderChangedCommand ड्रैग कॉम्पलेटेड ईवेंट के लिए हेन्डलर हालांकि, ऑडिओ स्लिपर्ड कॉमांड उपयुक्त हस्ताक्षर (जिसे एक हैंडलर के रूप में जोड़ा जा सकता है) के साथ एक विधि नहीं है और यह आपके दृश्य वर्ग में नहीं है और अंत में, आप ईवेंट नियंत्रकों के लिए बाइंडिंग का उपयोग नहीं कर सकते।

इसे हल करने के लिए, यह आपके View में सरल समाधान है: < / P>

  निजी शून्य DragCompletedEventHandler (ऑब्जेक्ट प्रेषक, DragCompletedEventArgs ई) {var viewModel = (YourViewModelType) this.DataContext; देखेंमॉडेल.ऑनऑडियो स्लाइडर परिवर्तित (यह, ई); }   

और भी बदलें

  ड्रैग कॉम्पलेटेड = "{बाध्यकारी ऑडियो स्लिपर्ड कॉमांड}"   

से <

अपने XAML में

इस तरह से ऊपर काम करेगा:

  1. आपके दृश्य में, जब ड्रैग कॉम्पलेटेड उठाया जाता है, तो विधि View.DragCompletedEventHandler को कॉल किया जाएगा
  2. इस विधि को AudioSliderChangedCommand <

    महत्वपूर्ण नोट

    आप प्रतीत होते हैं कि / code> घटना (देखें नोट नीचे देखें) ViewModel से और इसे बढ़ा, मूल घटना args पास

    घटनाओं, घटना संचालकों और आज्ञाओं के बारे में भ्रमित होने के लिए आपके कोड के रूप में यह खड़ा है भ्रामक है ऑडियोस्लाइडर चेंगल कॉमांड एक इवेंट है, लेकिन इसका नाम सुझाता है कि यह एक ICommand है। उचित नाम होगा ऑडियोस्लाइड बदल दिया गया

    इसके साथ ही, ऐसा करने का उचित एमवीवीएम तरीका DelegateCommand (सभी सभ्य MVVM फ़्रेमवर्क) एक; मैं प्रिज्म में कार्यान्वयन के लिए कक्षा का नाम प्रयोग किया था)। फिर, मान लें कि AudioSliderChangedCommand वास्तव में एक कमांड है, आपके दृश्य में कोड-पीछे होगा:

      निजी शून्य DragCompletedEventHandler (ऑब्जेक्ट प्रेषक, DragCompletedEventArgs ई) {var viewModel = (YourViewModelType) this.DataContext; viewModel.AudioSliderChangedCommand.Execute (); }   

    "घटना से कमांड" संलग्न व्यवहार के कुछ स्वाद का उपयोग करके किसी भी कोड-पीछे बिना भी करना संभव होगा।

Comments