我是wpf编程的新手,我有一个MVVM应用程序。我有一个StackPanel和StackPanel内部有一个名为ListView的ItemsControl和Itemsource是我的ObserveCollection NewProducts,其中包含ProductID和Name。
我的代码是怎么做的呢,它从我的Collection NewProducts中生成带有名称的按钮我想给这个按钮Command当我点击它们时触发
我试试这个:
<StackPanel Grid.Row="1">
<ItemsControl x:Name="ListViewProducts" ItemsSource="{Binding NewProducts}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Margin="10" Width="auto" Height="auto">
<StackPanel>
<Border Width="100" Height="40" CornerRadius="5">
<Button Content="{Binding Name}" Tag="{Binding ProductId}" FontWeight="Bold" Command="{BindingSaleViewModel.SendCommand}"/>
</Border>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
但是当我运行我的程序,当我点击我的按钮什么都没有发生。这是因为我在SaleViewModel中的命令没有在Product中找到,这是我的Model类。我想知道我是否能在ViewModel中找到Command的路径
谢谢,请原谅我的英语,我知道它不好。
不幸的是,WPF中的绑定方法并没有那么简单。该命令实际上是一个类,实现了ICommand
接口。
您可以在这里找到一个示例:如何在WPF中绑定命令。
否则,您可以将单击事件绑定到代码后置<Button Click="Button_Click"/>
中的方法在后台代码:private void Button_Click(object sender, RoutedEventArgs e)
{
// Add your code here...
}
给你的根元素一个名字。如:
<UserControl x:Class="blah"
other stuff
x:Name="root">
然后您可以在绑定中引用根元素,它的数据上下文将(假设?)是您的SaleViewModel:
<Button Content="{Binding Name}" Tag="{Binding ProductId}" FontWeight="Bold"
Command="{Binding DataContext.SendCommand, ElementName=root}"
CommandParameter="{Binding}"/>
还要注意CommandParameter
绑定,它将按钮的数据上下文(Product)传递给您的命令,否则您将不知道该命令与哪个产品相关。