如何重写GridView行样式 保留原有内容并在行尾添加自定义按钮
WPF ListView(GridView视图)行尾添加自定义按钮实现方法
需求说明
在保留现有GridView列结构、展示内容不变的基础上,为ListView每一行末尾增加自定义操作按钮。
现有基础XAML代码
<ListView ItemsSource="{Binding MyList}"> <ListView.View> <GridView> <GridView.Columns> <GridViewColumn Header="A" DisplayMemberBinding="{Binding A}"/> <GridViewColumn Header="B" DisplayMemberBinding="{Binding B}"/> </GridView.Columns> </GridView> </ListView.View> </ListView>
效果对比
- 现有运行效果:

- 目标实现效果:

具体实现
直接在GridView的Columns集合末尾追加一个自定义单元格模板的GridViewColumn即可,原有列的逻辑完全不需要改动:
<ListView ItemsSource="{Binding MyList}"> <ListView.View> <GridView> <GridView.Columns> <GridViewColumn Header="A" DisplayMemberBinding="{Binding A}"/> <GridViewColumn Header="B" DisplayMemberBinding="{Binding B}"/> <!-- 新增行尾自定义按钮列 --> <GridViewColumn Header="操作" Width="Auto"> <GridViewColumn.CellTemplate> <DataTemplate> <!-- 代码后置事件写法 --> <Button Content="自定义按钮" Margin="2" Click="CustomButton_Click"/> <!-- MVVM模式命令绑定写法,可替换上面的Click事件 <Button Content="自定义按钮" Margin="2" Command="{Binding DataContext.RowButtonCommand, RelativeSource={RelativeSource AncestorType=ListView}}" CommandParameter="{Binding}"/> --> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView.Columns> </GridView> </ListView.View> </ListView>
注意点
- 如果需要按钮列宽度自动适配内容,给
GridViewColumn设置Width="Auto"即可,也可手动指定固定宽度 - 使用MVVM命令绑定时,必须通过
RelativeSource将Command绑定到ListView的DataContext(即ViewModel层),因为单元格的DataContext是当前行的数据项,默认找不到ViewModel层定义的命令 CommandParameter传入{Binding}即可把当前行绑定的数据对象作为参数传给命令,方便定位操作对应的行数据- 可根据需求在DataTemplate中放入多个按钮、自定义图标等内容,不受限制
内容的提问来源于stack exchange,提问作者Ohad Cohen
相关产品推荐
相关产品推荐

