我有一个DataGrid,我想用它做一个CRUD,它绑定到ViewModel中的ObservableCollection上,并在它的每一行中创建一个Delete按钮,问题是当我单击事件触发源时该按钮模型,而不是ViewModel,所以我不能真正访问集合,而只能访问所选对象
这是我的观点
<DataGrid x:Name="EmployeeDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Path=Employees}">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/>
<DataGridTextColumn Header="Date Of Birth" Binding="{Binding DateOfBirth}"/>
<DataGridTextColumn Header="Address" Binding="{Binding Address}"/>
<DataGridTextColumn Header="Salary" Binding="{Binding Salary}"/>
<DataGridTextColumn Header="Function" Binding="{Binding Function}"/>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Click="{Binding Path=Update_Click}">Update</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button >Delete</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:1)
在ViewModel中,创建一个ICommand属性,该属性设置为带有参数的命令类,例如this one (MvvmLight)-该参数是您的雇员类的实例。
您可以像这样将按钮绑定到模板中
<Button Content="Update"
Command="{Binding Path=DataContext.UpdateCommand,
RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
CommandParameter="{Binding}" />
CommandParameter绑定传递DataGrid的该行的雇员项目。
答案 1 :(得分:0)
向模型添加一个属性,例如public object Tag { get; set; }
。
创建行实例对象后,请为VM或您要尝试使用的任何对象分配对Tag
的引用。这样,当操作从实例中运行时,只需将Tag
取消引用到所需的类引用中,并利用它指向的内容即可。