You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在UWP RadDataGrid中实现行选中时动态显隐AppBarButton?

实现Telerik RadDataGrid行选中时显示按钮的方案

当然可以实现这个需求!核心思路是绑定按钮的Visibility到当前行的选中状态,配合布尔值转可见性的转换器就能轻松搞定,具体步骤如下:

1. 添加布尔转可见性转换器

首先在你的Page/UserControl的资源中添加内置的BooleanToVisibilityConverter,它会帮我们把bool类型的选中状态转换成Visibility枚举值:

<Page.Resources>
    <BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
</Page.Resources>

2. 修改AppBarButton的Visibility绑定

在你的DataGridTemplateColumn的CellContentTemplate里,把AppBarButton的Visibility绑定到当前DataGridRow的IsSelected属性。这里需要用RelativeSource向上查找父级的DataGridRow元素:

<AppBarButton Grid.Column="1" Icon="Edit" 
              Visibility="{Binding IsSelected, 
                                  RelativeSource={RelativeSource AncestorType=telerikGrid:DataGridRow}, 
                                  Converter={StaticResource BoolToVisConverter}}" />

原理说明

  • RelativeSource={RelativeSource AncestorType=telerikGrid:DataGridRow}:告诉XAML在可视化树中向上查找最近的DataGridRow元素,这个元素就是当前单元格所在的行。
  • BooleanToVisibilityConverter:默认会把true(行选中)转换成Visibility.Visible,false(行未选中)转换成Visibility.Collapsed,完美匹配你的需求。

可选:基于ViewModel的扩展方案

如果你希望通过ViewModel来控制按钮显示(比如需要额外的业务逻辑判断),可以在MyViewModel中添加一个IsSelected属性:

public bool IsSelected { get; set; }

然后在RadDataGrid的SelectionChanged事件中同步选中行的IsSelected状态:

private void RadDataGrid_SelectionChanged(object sender, SelectionChangeEventArgs e)
{
    // 先取消之前选中行的状态
    foreach (var item in e.RemovedItems)
    {
        if (item is MyViewModel vm)
            vm.IsSelected = false;
    }
    // 设置新选中行的状态
    foreach (var item in e.AddedItems)
    {
        if (item is MyViewModel vm)
            vm.IsSelected = true;
    }
}

此时按钮的绑定就可以直接指向ViewModel的IsSelected属性:

<AppBarButton Grid.Column="1" Icon="Edit" 
              Visibility="{Binding IsSelected, Converter={StaticResource BoolToVisConverter}}" />

推荐优先使用第一种方案,不需要修改ViewModel代码,更符合MVVM的轻量化原则。

内容的提问来源于stack exchange,提问作者ata6502

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:01:21