【发布时间】:2013-10-03 10:57:20
【问题描述】:
我正在尝试使用 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 显示“测试”。
提前感谢您的帮助。
问候, 斯蒂芬
【问题讨论】:
-
该命令是否与例如在同一视图模型中绑定的名字?
-
OrderCommand在哪里定义?你在哪里指定DataContext?您还可以在每次获取时创建OrderCommand的新实例 -
OrderCommand在MainWindowViewModel中定义,该视图设置为DataContext。 -
所以
OrderCommand定义在与PictureUrl、Name、Price和Shortcut相同的类中,这些字段显示正常吗? -
No
PictureUrl,Name, ... 是我班级Product的属性。在我的MainWindowViewModel中是一个ObservableCollection<Product>,它存储所有这些对象。在我的View中,我在ListView中显示这些对象,而不是显示文本或某事。类似的 I 显示按钮。这些按钮现在需要一个RelayCommand,在我的例子中是OrderCommand,以及ListView中的按钮/对象作为参数。