在UI中显示/隐藏UWP RadDataGrid行的控件

时间:2018-01-23 15:26:07

标签: xaml uwp telerik telerik-grid

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

    <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>

MyVMViewModel类型MyViewModel,其属性Text1Prop1Prop2。我想动态显示/隐藏第一列中的AppBarButton。当用户通过点击选择该行时,我想显示该按钮。如果未选择该行,我想隐藏按钮。

UWP XAML和RadDataGrid有没有办法实现这一目标?我想我必须绑定按钮的Visibility属性(代码中的问号),但是如何?

1 个答案:

答案 0 :(得分:0)

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

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

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

然后,您可以在设置器中将先前选定行的EditVisibility设置为Collapsed,并将新行的Visibility设置为Visible

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