我有一个包含少量文本列和删除按钮的数据网格:
<DataGrid ItemsSource="{Binding Customers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" CanUserAddRows="False" SelectedItem="{Binding SelectedCustomer}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding FirstName}">
<DataGridTextColumn.Header>
<Label Content="{DynamicResource FirstName}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding LastName}">
<DataGridTextColumn.Header>
<Label Content="{DynamicResource LastName}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Address}">
<DataGridTextColumn.Header>
<Label Content="{DynamicResource Address}" />
</DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="{DynamicResource Delete}" Command="{Binding DeleteCustomerCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding SelectedCustomer, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
阅读了这个问题并回答:
How to use RelativeSource Binding to create DataGrid binding to Model and ViewModel?
我添加了
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}
一部分。但是,没有任何作用。当我使用Snoop进行调试时,我可以看到DataContexts已正确设置。 DataGrid
的datacontext是ViewModel,它使用Customers
集合属性,网格行的数据上下文是预期的单个Customer
对象。
我已经检查过命令是用真实姓名引用的,并且它们是公开的。命令在ViewModel的构造函数中初始化:
DeleteCustomerCommand = new RelayCommand<Customer>(DeleteCustomer);
并且命令是具有私有设置器的公共属性:
public RelayCommand<Customer> DeleteCustomerCommand { get; private set; }
我只收到以下错误:
DeleteCustomerCommand&#39;在&#39; object&#39;上找不到的属性&#39;&#39;数据网格&#39; (名称=&#39;&#39;)&#39 ;. BindingExpression:路径= DeleteCustomerCommand; 的DataItem =&#39;数据网格&#39; (名称=&#39;&#39);目标元素是&#39;按钮&#39; (名称=&#39;&#39); 目标财产是&#39; Command&#39; (键入&#39; ICommand&#39;)
答案 0 :(得分:5)
尝试将“DataContext”添加到命令绑定中:
dog = 9
因为dog = 9
上没有Command="{Binding DataContext.DeleteCustomerCommand, RelativeSource=...
属性,但在与DeleteCustomerCommand
相关联的视图模型中没有。{/ p>
其他信息
有时它帮助我使用Visual Studio助手为DataGrid
创建绑定,而不是手动完成编码。
只需在控件的属性网格中查找要为其创建绑定的属性。
在这种情况下,它是DataGrid
属性。左键单击命令属性文本的文本框,然后从上下文菜单中选择“创建数据绑定...”。