में डबल क्लिक करें मैं विकसित किया है कि एक पिक सूची के रूप में प्रयोग की जाने वाली इस प्रकार करना है एक WPF UserControl:करने के लिए एक कमांड बाध्य करने के लिए कैसे एक पंक्ति पर डेटा ग्रिड
- एक डेटा ग्रिड संस्थाओं की एक CollectionView करने के लिए बाध्य (उदाहरण के लिए कर्मचारी)
- डेटाग्रिड के ऊपर एक टेक्स्टबॉक्स जिसका उपयोग डेटाग्रिड में प्रदर्शित वस्तुओं को फ़िल्टर करने के लिए किया जा सकता है।
मैं एक कमांड का खुलासा करना चाहता हूं जिसे उपयोगकर्ता डेटाग्रिड में पंक्ति पर डबल-क्लिक करते समय निष्पादित किया जाएगा। इसके बाद कंटेनर डेटाग्रिड में चयनित इटैम के साथ कुछ कर कर प्रतिक्रिया दे सकता है।
अब तक मैं संभाल करने की कोशिश की है डबल क्लिक करें इस प्रकार है:
<DataGrid IsReadOnly="True">
<DataGrid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="... />
</DataGrid.InputBindings>
...
हालांकि डबल क्लिक करें घटना अभी भी डेटा ग्रिड शीर्षक में जब उपयोगकर्ता क्लिक सक्रिय करता है। मैं इसे सीमित करने में सक्षम होना चाहता हूं ताकि कमांड केवल तभी निष्पादित किया जा सके जब डबल क्लिक डेटाग्रिड के शरीर में हो। क्या ऐसा करने का कोई घोषणात्मक तरीका है?
अद्यतन
मैं सिर्फ WPF और MVVM साथ पकड़ के लिए हो रही है, और वास्तव में कैसे इस तरह निम्न स्तर के पुन: प्रयोज्य घटकों को लागू करने पर मार्गदर्शन के लिए देख रहा हूँ। किसी भी सामान्य सलाह को भी कृतज्ञतापूर्वक प्राप्त किया जाएगा और ऊपर उठाया जाएगा। यह खड़ा के रूप में, मैं यह सोचते हैं रहा हूँ मैं करने के लिए इस UserControl चाहते हैं:
निर्भरता संपत्ति "SelectedItem" है कि डेटा ग्रिड के SelectedItem
बेनकाब एक RoutedEvent "ItemDoubleClick" या कि इसी तरह के लिए बाध्य है बेनकाब उपयोगकर्ता को पंक्ति पर डबल-क्लिक करते समय निकाल दिया जाता है।
ICommandSource
लागू करें और डबल-क्लिक ईवेंट हैंडलर सेCommandHelpers.ExecuteCommandSource(this)
पर कॉल करें।
+1 धन्यवाद - यह वही है जो मैं प्राप्त करना चाहता हूं, लेकिन मैं सोच रहा था कि ऐसा करने के लिए एक घोषणात्मक तरीका है या नहीं। – Joe
मुझे संदेह है कि एक आसान तरीका है; आप [ब्लेंड एसडीके] (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=f1ae9a30-4928-411d-970b-e682ab179e17&displaylang=en) से 'इंटरएक्टिविटी' का उपयोग करके आदेशों को पाइप कर सकते हैं और एक 'EventToCommandAction', समस्या यह है कि एक शैली में अंतःक्रियाशीलता का उपयोग ** बहुत जटिल ** है, लेकिन यदि आपको परेशानी नहीं है [तरीके हैं] (http://stackoverflow.com/questions/1647815/how- टू-एड-एक-मिश्रण-व्यवहार में एक शैली-सेटर/4779168 # 4779168)। –
@ एचबी मैं बस एमवीवीएम के साथ पकड़ने के लिए जा रहा हूं और अब केआईएसएस चाहता हूं, इसलिए मुझे लगता है कि मैं कोडबैंड समाधान के लिए जाऊंगा।आपके समाधान के बारे में एक टिप्पणी - यह संभावित रूप से प्रत्येक पंक्ति के लिए माउसबाइंडिंग बना रहा है क्योंकि यह डेटाग्रिड में जोड़ा गया है - क्या बड़ी संख्या में पंक्तियां होने पर यह थोड़ा अक्षम हो सकता है? अगर मैं कोडबेंड मार्ग पर जा रहा हूं, तो मुझे आश्चर्य है कि क्या यह DataGrid.MouseDoubleClick ईवेंट को संभालने के लिए और अधिक कुशल होगा, यह सुनिश्चित करने के लिए परीक्षण करें कि मैं एक पंक्ति में हूं, फिर कमांड निष्पादित करें। – Joe