wpf - 如何获取 WPF 数据网格中的当前元素以及如何使用它执行某些操作?

标签 wpf data-binding mvvm icommand commandparameter

前段时间开始研究MVVM模式就是用这个tutorial 。我使用 MicroMvvm。

我有一个带有 EntityFramework 模型的 WPF 项目。我编写了 ViewModel 和 XAML View 。 我想在 DataGrid 中显示我的数据。(2 列数据和 2 按钮列:编辑、删除)

<DataGrid Height="250" ItemsSource="{Binding Books}" AutoGenerateColumns="False" >
    <DataGrid.Resources>
        <DataTemplate x:Key="DeleteTemplate" >
            <Button x:Name="DeleteButton" Command="{Binding DeleteBook, Mode=OneWay}" CommandParameter="{Binding}" >Delete</Button>
        </DataTemplate>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Title}"  Header="Book"/>
        <DataGridTextColumn Binding="{Binding Author}"  Header="Author"/>
        <DataGridTemplateColumn  CellTemplate="{StaticResource EditTemplate}" Header="Редактировать"/>
        <DataGridTemplateColumn  CellTemplate="{StaticResource DeleteTemplate}" Header="Удалить"/>
    </DataGrid.Columns>
</DataGrid>

在我的 LibraryViewModel.cs 中

#region Commands
void DeleteBookExecute()
{
    if (_books == null)
        return;

    //MessageBox.Show("This is delete button. Delete item id:" myMysticalObjectFromCommandParameter );
}
bool CanDeleteBookExecute()
{
    return true;
}
public ICommand DeleteBook
{
    get
    {
        return new RelayCommand(DeleteBookExecute, CanDeleteBookExecute);
    }
}

当我按下按钮(删除/编辑)时,我想删除/编辑当前对象。 我不知道如何在 MVVM 中做到这一点。

我可以使用 Command="{Binding DeleteBook, Mode=OneWay}"CommandParameter="{Binding}" 来实现吗?

如果正确,我如何从 LibraryViewModel 中的 CommandParameter 获取数据?

最佳答案

正如 DHN 所说,您的命令执行方法 DeleteBookExecute()CanDeleteBookExecute() 应具有对象类型的参数。

您的想法指向正确的方向。试试这个:

<DataGrid Name="LibraryGrid"
          Height="250" 
          ItemsSource="{Binding Books}" 
          AutoGenerateColumns="False" >

Command="{Binding DataContext.DeleteBook, ElementName=LibraryGrid}" CommandParameter="{Binding}"

ElementNameDataContext.DeleteBook 一起使用可以获取 LibraryViewModel 的命令。

关于wpf - 如何获取 WPF 数据网格中的当前元素以及如何使用它执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291864/

相关文章:

c# - 从WPF MVVM应用程序将参数传递给WPF用户控制库

WPF SolidColorBrush困境

WPF:ListView 中的进度条

wpf - 使用 PRISM 和 MVVM 的 ViewModel 的参数化构造函数

c# - 如果在所选字体 (Tahoma) 中找不到 Unicode 字符,则使用什么字体?

c# - 当只有 5 行可供查看时,将数据加载到 DataGrid

android - 数据绑定(bind)中的默认值错误

c# - 不可捕获的异常

ios - 如何使用 RxSwift 管理绑定(bind)到 TableViewCell 的树状数据模型

java - 处理 MVVM 架构中的输入和 Firebase 错误