/ / C # WPF लिस्टबॉक्स प्रसंग मेनू कमांड काम नहीं कर रहा है - c #, wpf, referencemenu, listboxitem

C # WPF लिस्टबॉक्स प्रसंग मेनू कमांड काम नहीं कर रही है - c #, wpf, referencemenu, listboxitem

वर्तमान में मैं एक संदर्भ मेनू जोड़ने की कोशिश कर रहा हूँ a ListBox जो आइटम टेम्पलेट का उपयोग करता है। मैं संदर्भ मेनू आइटम जोड़ने में सक्षम हूं, लेकिन जब मैं आदेशों को बांधने की कोशिश करता हूं, तो कुछ भी नहीं होता है।

Main_Window में डेटा संदर्भ सेट है। यहाँ के लिए XAML है ListBox। मैं एक बटन के हिस्से के रूप में एक समान बाइंडिंग शैली का उपयोग करता हूं ListView.ItemTemplate इसलिए मुझे लगता है कि यह काम करेगा, लेकिन दुख की बात है कि यह नहीं है। मुझे यहां क्या समझ नहीं आ रहा है? (कोड का केवल महत्वपूर्ण हिस्सा यहां है)

        <ListBox x:Name="company_buttons_listbox"
ItemsSource="{Binding Buttons_Binding}"
SelectedIndex="{Binding Selected_Index, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}">

<ListBox.Resources>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Update Frazer Server Link" Foreground="Black" FontFamily="Segoe UI" FontSize="14" FontWeight="Bold"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"
Command="{Binding ElementName=Main_Window, Path=DataContext.Testing}"/>
</ContextMenu>
</Setter.Value>
</Setter>
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightSteelBlue" Opacity="0.5"/>
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="LightSteelBlue" Opacity="0.5"/>
</Style.Resources>
</Style>
<Style TargetType="{x:Type ListBox}">
<Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/>
</Style>
</ListBox.Resources>

<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="-2,0,-2,0">

<Button CommandParameter="{Binding}"
Command="{Binding ElementName=Main_Window, Path=DataContext.Open_Link}">
</Button>

<Label VerticalContentAlignment="Top"
Margin="5,0,5,0" Height="19" Padding="0"
Foreground="White" FontFamily="Segoe UI" FontSize="12" FontWeight="Bold"
Content="{Binding ItemText}"/>

</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

उत्तर:

जवाब के लिए 0 № 1

इसलिए, मैंने इसे हल न करके इसे हल किया और इसके बजाय एक काम का उपयोग किया।

अनिवार्य रूप से इस मुद्दे से आता है:

System.Windows.Data त्रुटि: 4: के साथ बाइंडिंग के लिए स्रोत नहीं मिल सकता है संदर्भ

मैंने पाया कि कॉन्टेक्ट मेनस विज़ुअल ट्री का हिस्सा नहीं है (इस बारे में खुश नहीं हैं) और इसलिए वे उन तत्वों को उसी तरीके से एक्सेस नहीं कर सकते।

मैं रिफ्लेक्शन का उपयोग करने का प्रशंसक नहीं हूं, इसलिए एलीमेंट्सपी विधि मेरे साथ-साथ टेबल के लिए भी बंद है। मैंने सीधे सेट करने की कोशिश की Click="some_function" और यह भी आश्चर्यजनक रूप से डीआईडी ​​काम नहीं करता है।

मैंने इसके बजाय सिर्फ अपना पूरा लपेट लिया ListBox में Grid और निम्नलिखित का उपयोग किया। वास्तव में MVVM नहीं है, लेकिन मैं इस बिंदु पर कम ध्यान रख सकता हूं कि मैंने एक ठोस और विश्वसनीय समाधान खोजने में कितना समय बर्बाद किया।

XAML:

            <Grid.ContextMenu>
<ContextMenu>
<MenuItem Header="Menu Item Text" Foreground="Black" FontFamily="Segoe UI" FontSize="14" FontWeight="Bold"
Click="menu_item_function"/>
<Separator/>
</Grid.ContextMenu>

कोड के पीछे:

    private void menu_item_function(object sender, RoutedEventArgs e)
{
// Get the viewmodel from the DataContext
MainWindowViewModel viewmodel = DataContext as MainWindowViewModel;

// Call command from viewmodel
if ((viewmodel != null) && (viewmodel.View_Model_Function.CanExecute(this)))
{
viewmodel.View_Model_Function.Execute(this);
}
}