c# - Get the ListBox row object from a button that is on the DataTemplate -
मेरे पास ListBox
एक DataTemplate
के साथ है I इस टेम्पलेट पर एक बटन
है जब बटन
क्लिक किया जाता है मैं वस्तु प्रत्येक पंक्ति है कि के साथ कुछ तर्क करना चाहते हैं (इस मामले में एक वस्तु बुलाया WorkItemTypeMappings
)।
में OnClick
मैं बटन
( ऑब्जेक्ट प्रेषक
) उस ऑब्जेक्ट से कैसे जा सकता हूं जो बटन उस पंक्ति पर है?
यहां मेरी ListBox
के XAML है:
<कोड> & lt; ListBox ItemsSource = "{बाइंडिंग स्रोत = {StaticResource WorkItemTypeMappingsCollectionView}}" HorizontalContentAlignment = "मांसपेशियों" ScrollViewer .HorizontalScrollBarVisibility = "अक्षम" नाम = "lstWITypes" & gt; & LT; ListBox.GroupStyle & gt; & Lt; x: स्टेटिक सदस्य = "ग्रुपस्टाइल। डिफॉल्ट" / & gt; & LT; /ListBox.GroupStyle> & LT; ListBox.ItemTemplate & gt; & LT; DataTemplate & gt; & Lt; ग्रिड क्षैतिज एलाइमेंट = "स्टैच" & gt; & LT; Grid.ColumnDefinitions & gt; & Lt; स्तंभ डिफाइनिशन चौड़ाई = "2 *" / & gt; & Lt; स्तंभ डिफाइनिशन चौड़ाई = "2 *" / & gt; & Lt; कॉलम डिफाइनिशन चौड़ाई = "50" / & gt; & LT; /Grid.ColumnDefinitions> & LT; TextBlock Grid.Column = "0" पाठ = / & gt "{SourceType, कनवर्टर = {StaticResource WorkItemTypeToStringConverter} बाइंडिंग}"; & LT; ComboBox Grid.Column = "1" SelectedItem = "{बाइंडिंग DestType}" ItemsSource = "{WorkItemTypesForCurrentDestProject बाइंडिंग, स्रोत = {x: स्टेटिक loc: MainMediator.Instance}, निदान: PresentationTraceSources.TraceLevel = उच्च}" DisplayMemberPath = " नाम "/ & gt; & Lt;! - यह बटन है - & gt; & Lt; बटन ग्रिड। कॉलम = "2" सामग्री = "{बाध्य प्रति प्रतिशत}" क्लिक = "मैनुअलमैपिंगक्लिक" / & gt; & Lt; / ग्रिड & gt; & Lt; / DataTemplate & gt; & LT; /ListBox.ItemTemplate> & Lt; / ListBox & gt;
एक विकल्प के रूप में आप ईवेंट के बजाय कमांड का उपयोग कर सकते हैं यदि आप अपने बटन को कमांड में बाँध करते हैं और एक कमांड पैरामीटर के साथ पास करते हैं, तो आपको उस बटन से संबंधित आइटम प्राप्त करने में सक्षम होना चाहिए। उदाहरण कोड:
& lt;! - यह बटन है - & gt; & LT; बटन Grid.Column = "2" सामग्री = "{बाइंडिंग PercentMapped}" कमान = "SolutionNamespace: CommandClass.ButtonClickedCommand" CommandParameter = "{बाइंडिंग}" / & gt;
मुझे यकीन है कि कैसे परिचित आप WPF कमांडिंग लेकिन आप उस CommandParameter एक पथ नाम के बिना संदर्भ के लिए बांधता है देखेंगे के साथ कर रहे हैं नहीं कर रहा हूँ, कि यह WorkItemTypeMappings कि आप की आवश्यकता को बांधता है कहने के लिए है ।
कमांड का उदाहरण कोड:
सार्वजनिक स्थिर सिंपल कॉमांड बटनक्लाइटमैनैंड {get; सेट; } स्थिर कमांडक्लास () {बटनक्लिक करें कॉमांड = नया सरल कॉमांड {ExecuteDelegate = x = & gt; ButtonClicked (एक्स के रूप में कार्यप्रतिकृति प्रकार के मिलान)}; } Public static ButtonClicked (WorkItemTypeMappings मैपिंग) {क्योंकि अगर (मैपिंग! = नल) MessageBox.Show (mapping.PercentMapped)}
आप देखेंगे कि ButtonClickedCommand स्थिर है, यह आवश्यक है बटन अपने वर्तमान बंधन संदर्भ से आदेश का उपयोग नहीं कर सकते हैं।
<कोड> SimpleCommand ICommand का सिर्फ एक सरल कार्यान्वयन है, गूगल यह एक अगर तुम नहीं यकीन है कि हो सकता है। मुझे आशा है कि यह आपकी समस्या का एक overkill नहीं है, लेकिन आप WPF आदेश के साथ गलत नहीं जा सकते।
गुड लक।
Comments
Post a Comment