【发布时间】:2014-09-04 02:47:53
【问题描述】:
我最近开始熟悉 WPF / MVVM,但我被绑定卡住了。我有一个客户对象的 ObservableCollection,我将它绑定到一个 DataGrid。我想要实现的是将项目的 ID 属性绑定为按钮命令的参数。
这是 CustomerViewModel.cs 文件中的相关代码
private ObservableCollection<Customer> _customer = new ObservableCollection<Customer>();
public ObservableCollection<Customer> Customers
{
get
{
return _customers;
}
set
{
SetProperty(ref _customers, value);
}
}
private ICommand _openCustomerCommand;
public ICommand OpenCustomerCommand
{
get
{
return _openCustomerCommand ?? (_openCustomerCommand = new RelayCommand(param => OpenCustomer((int)param)));
}
}
以及来自 CustomerView.xaml 的 XAML:
<DataGrid ItemsSource="{Binding Customers}" >
<DataGridTemplateColumn Header="Open" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Open"
Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.OpenCustomerViewCommand}"
CommandParameter="{Binding Customers/ID}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid>
我的问题如下:根据http://www.wpftutorial.net/BindingExpressions.html我可以使用正斜杠(/)来访问集合的当前项。但是,在这种情况下,接收到的值为空。
我看到了Bind CommandParameter to DataItem for a Button in a DataGrid,它建议使用 CommandParameter={Binding},但随后我收到了绑定到行的完整对象,这没关系,但并不是我真正想要的。
【问题讨论】:
标签: c# wpf xaml mvvm data-binding