命令绑定到中继命令不起作用

本文关键字:命令 不起作用 绑定 | 更新日期: 2023-09-27 18:33:11

我正在尝试使用 WPF 在 C# 中开发一个简单的寄存器。我有产品按钮,如果按下按钮(通过键盘快捷键或鼠标按钮),则订购产品。我不知道我有多少产品(将从数据库中加载),所以固定的解决方案不是我想要的。我已经设法通过绑定到对象的Listbox显示这些按钮。

<ListView.ItemTemplate>
    <DataTemplate>
        <UniformGrid>
            <Button Template="{DynamicResource ButtonBaseControlTemplate1}" Style="{StaticResource ButtonStyle1}" Command="{Binding OrderCommand}" CommandParameter="{Binding}">
                <Button.Background>
                    <ImageBrush ImageSource="{Binding PictureUrl}" />
                </Button.Background>
                <DockPanel>
                    <TextBlock Text="{Binding Name}" FontSize="30"  DockPanel.Dock="Top" HorizontalAlignment="Center" Margin="0, 25, 0, 0"/>
                    <TextBlock Text="{Binding Price}" FontSize="15" HorizontalAlignment="Left" Margin="5"/>
                    <TextBlock Text="{Binding Shortcut}" FontSize="15" HorizontalAlignment="Right" DockPanel.Dock="Bottom" VerticalAlignment="Bottom" Margin="5"/>
                </DockPanel>
            </Button>
        </UniformGrid>
    </DataTemplate>
</ListView.ItemTemplate>

绑定Command不起作用。如果我点击按钮,什么也没发生。如果我使用 Clicked 事件,一切正常,但我需要绑定到按钮的对象作为参数。

这是我的命令属性:

public RelayCommand OrderCommand
{
    get
    {
        return new RelayCommand((p) => MessageBox.Show("Test"), (p) => true);
    }
}

如果一切按预期工作,应该有一个显示"测试"的MessageBox

提前感谢您的帮助。

问候斯特凡

命令绑定到中继命令不起作用

您必须更新命令绑定才能在窗口/用户控件数据上下文中找到它

假设命令位于 Windows DataContext 中

Command="{Binding DataContext.OrderCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"

您必须更改按钮的数据上下文。就像现在一样,数据上下文是列表视图中的对象。你想要的是使用列表视图的数据上下文。

类似的东西

Datacontext="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"