我有一个简单的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>
MyVM
是ViewModel
类型MyViewModel
,其属性Text1
,Prop1
和Prop2
。我想动态显示/隐藏第一列中的AppBarButton
。当用户通过点击选择该行时,我想显示该按钮。如果未选择该行,我想隐藏按钮。
UWP XAML和RadDataGrid
有没有办法实现这一目标?我想我必须绑定按钮的Visibility
属性(代码中的问号),但是如何?
答案 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();
}