【问题标题】:Show/hide controls in UI for UWP RadDataGrid rows在 UWP RadDataGrid 行的 UI 中显示/隐藏控件
【发布时间】:2018-01-23 15:26:07
【问题描述】:

我有一个用于 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 是 ViewModel 类型的 MyViewModel,具有 Text1、Prop1 和 Prop2 属性。我想动态显示/隐藏第一列中的AppBarButton。当用户通过单击选择该行时,我想显示该按钮。当没有选择行时,我想隐藏按钮。

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

【问题讨论】:

    标签: xaml uwp telerik telerik-grid


    【解决方案1】:

    首先,您需要为每个项目添加一个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();
    }
    

    【讨论】:

    • 谢谢,马丁。我有一个类似的想法,只是使用布尔值和转换器代替了可见性。这样我的 ViewModel 就与 UI 无关了。我希望有另一个“纯 XAML”解决方案。如果没有,我会将您的回复标记为答案。
    • 我不认为没有 XAML 的完全干净的解决方案,只是理论上使用 UWP 行为,但我不确定,我会尝试 :-)
    • 我在 UWP 中使用了行为,但在这种情况下还不够。感谢您的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多