c# WPF数据绑定



我是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)传递给您的命令,否则您将不知道该命令与哪个产品相关。