WPF中DataGrid控件内Button的Command和CommandParameter的绑定

场景:视频上传功能,上传列表使用DataGrid控件,视频有不同的状态对应不同的操作,DataGrid中最后一列为操作列,里面是Button控件。希望点击Button后执行对应的操作,但是设置Button的 Command="{Binding VideoOperationCommand}"后触发不了操作。

XAML代码如下:

<DataGrid ItemsSource="{Binding VideoList}">
    <DataGrid.Columns>
        <!--序号-->
        <DataGridTextColumn Header="序号" Width="80" Binding="{Binding Index}"/>
        <!--视频名称-->
        <DataGridTextColumn Header="视频名称" Width="300" Binding="{Binding Name}" /> 
        <!--文件大小-->
        <DataGridTextColumn Header="文件大小" Width="120" Binding="{Binding SizeString}" />
        <!--源视频地址-->
        <DataGridTextColumn Header="源视频地址" Width="280" Binding="{Binding SourcePath}" />
        <!--
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
WPF的`DataGrid`添加`Button`,并为`Button`添加事件,可以使用以下步骤: 1. 在`DataGrid`添加`Button`列,可以使用`DataGridTemplateColumn`来实现,如下所示: ```xml <DataGrid.Columns> <DataGridTemplateColumn Header="Action"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="Click Me" Click="ButtonClick"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> ``` 2. 在`Button`上添加`Click`事件的处理方法,例如`ButtonClick`: ```csharp private void ButtonClick(object sender, RoutedEventArgs e) { // 处理按钮点击事件的代码 } ``` 3. 在代码,为`DataGrid`的`ItemsSource`属性设置数据源,例如`List<MyData>`,其`MyData`是自义类型。 ```csharp List<MyData> dataList = new List<MyData>(); // 添加数据到dataList myDataGrid.ItemsSource = dataList; ``` 4. 在`MyData`类型添加一个属性,用于到`Button`的`DataContext`。例如: ```csharp public class MyData { public string Name { get; set; } public ICommand ButtonCommand { get; set; } public MyData(string name, ICommand buttonCommand) { Name = name; ButtonCommand = buttonCommand; } } ``` 5. 在`DataGridTemplateColumn.CellTemplate`,使用`Binding`来`MyData`类型的`ButtonCommand`属性到`Button`的`Command`属性,如下所示: ```xml <DataGridTemplateColumn Header="Action"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="Click Me" Command="{Binding ButtonCommand}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> ``` 6. 在代码为`MyData`类型的`ButtonCommand`属性设置一个`ICommand`实例,例如: ```csharp MyData data = new MyData("Test", new RelayCommand(ButtonClick)); // 添加data到dataList ``` 其,`RelayCommand`是一个实现了`ICommand`接口的自义类,用于将一个方法到`Button`的`Command`属性上。`ButtonClick`是`Button`的`Click`事件处理方法。 ```csharp public class RelayCommand : ICommand { private readonly Action execute; private readonly Func<bool> canExecute; public RelayCommand(Action execute) : this(execute, null) { } public RelayCommand(Action execute, Func<bool> canExecute) { if (execute == null) throw new ArgumentNullException("execute"); this.execute = execute; this.canExecute = canExecute; } public bool CanExecute(object parameter) { return canExecute == null || canExecute(); } public void Execute(object parameter) { execute(); } public event EventHandler CanExecuteChanged; } ``` 通过以上步骤,就可以在`DataGrid`添加带有事件的`Button`了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值