将DataGrid行绑定到ViewModel中的方法

时间:2018-10-03 12:13:46

标签: c# wpf mvvm binding datagrid

我有一个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>

2 个答案:

答案 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取消引用到所需的类引用中,并利用它指向的内容即可。