Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将DataGrid行绑定到ViewModel中的方法_C#_Wpf_Mvvm_Binding_Datagrid - Fatal编程技术网

C# 将DataGrid行绑定到ViewModel中的方法

C# 将DataGrid行绑定到ViewModel中的方法,c#,wpf,mvvm,binding,datagrid,C#,Wpf,Mvvm,Binding,Datagrid,我有一个DataGrid,我想用它制作一个CRUD,它绑定到ViewModel中的一个ObservableCollection,我在它的每一行创建了一个Delete按钮,问题是当我单击按钮时,事件从模型而不是ViewModel触发,所以我不能真正访问集合,只能访问选定的对象 我的看法是: <DataGrid x:Name="EmployeeDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Path=Employees}"

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

使现代化
删去

将属性添加到模型中,例如
公共对象标记{get;set;}


创建行实例对象时,将引用分配给VM或您试图在
标记中找到的任何对象。这样,当操作从前面提到的实例运行时,只需将
标记
反引用到所需的类引用中,并利用它所指向的对象即可。

在ViewModel中,创建一个ICommand属性,该属性设置为采用参数的命令类,例如-参数是employee类的实例

您可以像这样绑定模板中的按钮

<Button Content="Update"
        Command="{Binding Path=DataContext.UpdateCommand,
                  RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
        CommandParameter="{Binding}" />

CommandParameter绑定传入DataGrid中该行的employee项