Show/hide UWP RadDataGrid 行的 UI 控件

Show/hide controls in UI for UWP RadDataGrid rows

我有一个用于 UWP RadDataGrid 的简单 Telerik UI:

    <telerikGrid:RadDataGrid ItemsSource="{x:Bind MyVM.Items}"
                             SelectedItem="{x:Bind MyVM.SelectedItem, Mode=TwoWay}"
                             UserEditMode="None"
                             AutoGenerateColumns="False"
                             UserGroupMode="Disabled"
                             UserFilterMode="Disabled"
                             GridLinesThickness="1"
                             AlternationStep="2">
        <telerikGrid:RadDataGrid.Columns>
            <telerikGrid:DataGridTemplateColumn Header="Column1" SizeMode="Fixed" Width="200">
                <telerikGrid:DataGridTemplateColumn.CellContentTemplate>
                    <DataTemplate x:DataType="vm:MyViewModel">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <TextBlock Grid.Column="0" Text="{x:Bind Text1}" />
                            <AppBarButton Grid.Column="1" Icon="Edit" Visibility="???" />
                        </Grid>
                    </DataTemplate>
                </telerikGrid:DataGridTemplateColumn.CellContentTemplate>
            </telerikGrid:DataGridTemplateColumn>

            <telerikGrid:DataGridTextColumn PropertyName="Prop1" Header="Column1" />
            <telerikGrid:DataGridTextColumn PropertyName="Prop2" Header="Column2" />
        </telerikGrid:RadDataGrid.Columns>
    </telerikGrid:RadDataGrid>

MyVM 是类型 MyViewModelViewModel,它具有属性 Text1Prop1Prop2。我想动态地 show/hide 第一列中的 AppBarButton 。当用户通过单击选择该行时,我想显示该按钮。当未选中该行时,我想隐藏该按钮。

在 UWP XAML 和 RadDataGrid 中有什么方法可以做到这一点吗?我想我必须绑定按钮的 Visibility 属性 (代码中的问号)但是如何?

首先,您需要为每个项目添加 EditVisibility 属性:

private Visibility _visibility = Visibility.Collapsed;
public Visibility EditVisibility
{
   get => _visibility;
   set
   {
       _visibility = value;
       NotifyPropertyChanged();
   }
}

现在,您已经绑定了 SelectedItem 属性,因此我们将功能插入其中。一旦用户单击一行,该行就会被选中。这意味着 SelectedItem 属性 的 set 块将执行。

在 setter 中,您可以先将先前选择的行的 EditVisibility 设置为 Collapsed,然后将新行的 Visibility 设置为 Visible :

set
{
   if ( _selectedItem != null ) _selectedItem.EditVisibility = Visibility.Collapsed;
   _selectedItem = value;
   _selectedItem.EditVisibility = Visibility.Visible;
   NotifyPropertyChanged();
}