【问题标题】:Binding DataGrid row to a mthod in the ViewModel将 DataGrid 行绑定到 ViewModel 中的方法
【发布时间】:2019-03-08 16:05:34
【问题描述】:

我有一个 DataGrid,我想用它创建一个 CRUD,它绑定到 ViewModel 中的一个 ObservableCollection,我在它的每一行中创建了一个删除按钮,问题是当我单击按钮时触发事件模型,而不是 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>

【问题讨论】:

    标签: c# wpf mvvm binding datagrid


    【解决方案1】:

    在您的 ViewModel 中,创建一个 ICommand 属性,该属性设置为一个带有参数的命令类,例如 this one (MvvmLight) - 该参数是您的员工类的一个实例。

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

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

    CommandParameter 绑定传入 DataGrid 的该行的员工项。

    【讨论】:

      【解决方案2】:

      向您的模型添加一个属性,例如public object Tag { get; set; }

      当创建行实例对象时,分配一个对 VM 的引用或任何您尝试访问的对象 Tag。这样,当操作从上述实例运行时,只需将 Tag 取消引用到所需的类引用中并利用它所指向的内容。

      【讨论】:

        猜你喜欢
        • 2011-04-30
        • 2012-02-23
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-11
        • 2017-12-28
        • 2011-06-10
        相关资源
        最近更新 更多