我正在尝试使用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
显示“测试”。
提前感谢您的帮助。
此致 斯蒂芬
答案 0 :(得分:4)
您必须更新命令绑定才能在Window / Usercontrol datacontext
中找到它假设Command在Windows DataContext中
Command="{Binding DataContext.OrderCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
答案 1 :(得分:1)
您必须更改按钮的datacontext。就像现在一样,datacontext是listview中的对象。你想要的是使用listview的datacontext。
像这样的东西
Datacontext="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"