मेरे पास एक सूची बॉक्स है जिसके लिए मैं एक संदर्भ मेनू शामिल करने के लिए ItemContainer स्टाइल कर रहा हूं। इसके लिए xaml यहां है।कैलिबर संदेश द्वारा डाला गया "विधि के लिए कोई लक्ष्य नहीं मिला"। (0)
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
...
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Remove Group" cal:Message.Attach="DeleteGroup"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
मैंने नीचे दिए गए व्यूमोडेल में लक्ष्य विधि को कोड किया है।
public void DeleteGroup() { //ToDo
...
}
ViewModel UserControl के DataContext जिसमें ListBox है वहाँ के रूप में स्थापित किया जाएगा।
उपरोक्त कोड "विधि के लिए कोई लक्ष्य नहीं मिला"। मुझे यकीन नहीं है कि यह क्यों काम नहीं करता है। मैं भी निम्नलिखित भिन्नता
<MenuItem Header="Remove Group" cal:Message.Attach="DeleteGroup"
cal:Action.Target="{Binding ElementName=UCRelayDispositionView, Path=DataContext}">
जहां UCRelayDispositionView UserControl का नाम है की कोशिश की है।
उपर्युक्त कोड क्यों काम नहीं करता है?
संपादित करें: 1 इसके अलावा निम्नलिखित
<MenuItem Header="Remove Group" cal:Message.Attach="DeleteGroup"
cal:Action.TargetWithoutContext="{Binding ElementName=UCRelayDispositionView, Path=DataContext}">
और इस
<MenuItem Header="Remove Group" cal:Message.Attach="DeleteGroup"
cal:Action.TargetWithoutContext="{Binding ElementName=UCRelayDispositionView}">
संपादित करने की कोशिश की: 2 मैं ItemContainer पर निम्नलिखित तरीके से टैग का उपयोग करने की कोशिश की है लेकिन यह या तो काम नहीं करता है।
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Tag" Value="{Binding Path=DataContext, ElementName=UCRelayDispositionView}"/>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Remove Group"
cal:Message.Attach="DeleteGroup()"
cal:Action.TargetWithoutContext="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Self}}"/>
</ContextMenu>
</Setter.Value>
</Style>
</ListBox.ItemContainerStyle>
संपादित करें 3: बाइंडिंग त्रुटियाँ
System.Windows.Data Error: 40 : BindingExpression path error: 'PlacementTarget' property not found on 'object' ''MenuItem' (Name='')'. BindingExpression:Path=PlacementTarget.Tag; DataItem='MenuItem' (Name=''); target element is 'MenuItem' (Name=''); target property is 'TargetWithoutContext' (type 'Object')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=UCRelayDispositionView'. BindingExpression:Path=DataContext; DataItem=null; target element is 'ContextMenu' (Name=''); target property is 'Tag' (type 'Object')
आपका कोड काम नहीं करता है। अभी भी एक ही त्रुटि देता है। जहां तक टैग का उपयोग करना है, मैं इसे कहां रखूं? मेरे पास ItemContainerStyle पर यह संदर्भ मेनू है! – Jatin
यदि आपने पोस्ट किए गए एसओ लिंक में एक नज़र डाली है, तो इसे कहां रखा जाए इसका एक उदाहरण है। मूल रूप से आपको संदर्भ मेनू को उत्पन्न करने वाले आइटम को प्राप्त करने के लिए 'ContextMenu.PlacementTarget' प्रॉपर्टी का उपयोग करना होगा और इसके 'डेटाकॉन्टेक्स्ट' से जुड़ना होगा, हालांकि इसके लिए आपको 'टैग' संपत्ति में मूल कंटेनर के 'डेटाकॉन्टेक्स्ट' को हैक करना होगा । यह मेरे लिए काम करता है (यह दृश्य में एक ईवेंट बनाने के लायक हो सकता है ताकि आप मेनू आइटम पर क्लिक करते समय कोड-बैक और डिबग कर सकें। इस तरह आप ऑब्जेक्ट ग्राफ़ का पता लगा सकते हैं और सही बाध्यकारी पथ खोज सकते हैं) – Charleh
मैंने ** EDIT 2 ** के रूप में चिह्नित प्रश्न संपादित किया है। मुझे यकीन नहीं है कि हम टैग को इस तरह सेट करने के लिए स्टाइल का उपयोग कर सकते हैं, लेकिन वही त्रुटि अभी भी बनी हुई है। – Jatin