C#WPF列表框上下文菜单命令不起作用

时间:2018-04-11 21:20:59

标签: c# wpf contextmenu listboxitem

目前我正在尝试向使用项目模板的ListBox添加上下文菜单。我能够添加上下文菜单项,但是当我尝试绑定命令时,没有任何反应。

Main_Window有一个数据上下文集。这是ListBox的XAML。我使用类似的Binding样式作为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>

1 个答案:

答案 0 :(得分:0)

所以,我通过不解决这个问题来解决这个问题,而是使用了一个解决方法。

基本上问题来自于:

  

System.Windows.Data错误:4:找不到绑定源   参考

我发现Context Menus不是Visual Tree的一部分(对此不满意),因此无法以相同的方式访问这些元素。

我不喜欢使用Reflection,所以ElementSpy方法不在我的桌面上。我试图直接设置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);
        }
    }