WPF中DataGrid控件内Button的Command和CommandParameter的绑定
来源:互联网 发布:泳衣走光 知乎 编辑:程序博客网 时间:2024/05/16 05:16
场景:视频上传功能,上传列表使用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}" /> <!--状态--> <DataGridTextColumn Header="状态" Width="120" Binding="{Binding StatusString}" /> <!--上传进度--> <DataGridTemplateColumn Header="上传进度" Width="260"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ProgressBar Value="{Binding Progress}" Margin="20,0"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> <!--上传速度--> <DataGridTextColumn Header="上传速度" Width="150" Binding="{Binding SpeedString}" /> <!--操作--> <DataGridTemplateColumn Header="操作" MinWidth="120"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="{Binding OperationString}" Command="{Binding VideoOperationCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=SelectedItem}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns></DataGrid>
分析:因为DataGrid的ItemsSource绑定了VideoList,VideoList是一个Video类的列表,DataGrid里面控件的DataContext就成了Video也就是里面控件的Binding都是Video的属性,比如视频名称(Binding="{Binding Name}")。而Video里没有VideoOperationCommand,所以就不能触发操作了。
解决:知道了原因就好说了,把Button的Command绑定为ViewModel里面的VideoOperationCommand就好了,而DataGrid的DataContext就是ViewModel,那这样做就好了:
<!--操作--><DataGridTemplateColumn Header="操作" MinWidth="120"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="{Binding OperationString}" Command="{Binding DataContext.VideoOperationCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}, Path=SelectedItem}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>通过上面的分析,我们知道,可以直接为命令传递当前Video的某一个属性,比如视频名称:
CommandParameter="{Binding Name}"
0 1
- WPF中DataGrid控件内Button的Command和CommandParameter的绑定
- WPF 中DataGrid控件绑定数据的一个例子
- 【WPF】CommandParameter无法多传参?传递控件自身的ItemSource数据
- MVVM模式---Command与CommandParameter的使用
- wpf的datagrid绑定数据
- 关于wpf的命令绑定command的指向控件绑定问题,Path=和ElementName=设定
- WPF Prism 中Command绑定的简单应用
- C# WPF中DataGrid的数据绑定(Binding)
- WPF DataGrid中列的属性绑定问题
- WPF 之使用Treeview和DataGrid的关联绑定
- WPF MVVM后台绑定没有Command属性的控件,绑定任何事件事件
- WPF 中 datagrid控件的界面数据逆转化为dataTable
- wpf内的控件缩放
- 在DataGrid(Windows Form)中绑定一个日期和时间控件(DatetimePicker)的做法
- 在DataGrid(Windows Form)中绑定一个日期和时间控件(DatetimePicker)的做法
- 在DataGrid(Windows Form)中绑定一个日期和时间控件(DatetimePicker)的做法
- WPF中DataGrid的使用
- WPF中DataGrid的应用
- Spring3.0.5和Hibernate3.6.0集成的事务控制配置方法
- python服务器客户端实战tcp模式
- php 读取目录所有文件信息dir()
- eclipse打不开,只是闪一下问题解决方案。
- 取AB两字符串之间的正则
- WPF中DataGrid控件内Button的Command和CommandParameter的绑定
- linux命令hwclock用法详解
- 分享几个游戏源码
- python各种类型转换-int,str,char,float,ord,hex,oct等
- AppScan学习笔记
- sqoop导出数据到oracle出现错误ORA-12537,ORA-12545
- 通过BASE64Encoder获得数据指纹
- iterator 是什么?
- 判断javascript变量类型的种种方法比较