c# - 如何更改所选行中列的可见性?
问题描述
当用户选择一行时,我想在所选行的末尾显示一个按钮。你知道怎么做吗?
我试过这样:
<DataGrid Name="Grid" ItemsSource="{Binding Data}" AutoGenerateColumns="False">
<DataGrid.ItemContainerStyle>
<Style TargetType="DataGridRow">
<EventSetter Event="MouseDoubleClick" Handler="Row_DoubleClick"/>
</Style>
</DataGrid.ItemContainerStyle>
<!-- ... -->
<Button Grid.Column="4" Name="ButtonAssign" Visibility= "Hidden" Content="Assign" Click="btnAssign_Click"/>
<!-- ... -->
private void Row_DoubleClick(object sender, MouseButtonEventArgs e)
{
var row = (DataGridRow)sender;
//I don't know how to find the button on the row in here. This doesn't work:
var buttonAssign = row.FindName("ButtonAssign");
//buttonAssign is always NULL :-(
if (buttonAssign != null)
{
((Button)buttonAssign).Visibility = Visibility.Visible;
}
((RowItemModel)row.Item).ButtonAssignVisibility = Visibility.Hidden;
}
你能帮我吗?
解决方案
您可以使用绑定和实例Visibility
将按钮的IsSelected
属性绑定到父级的属性built-it ,例如:DataGridRow
RelativeSource
BooleanToVisibilityConverter
Visibility="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Converter={StaticResource BooleanToVisibilityConverter}}"
以下代码提供了一个简单示例,其中包含您的问题和评论中的代码。除了Visibility
绑定之外,您还必须在范围内的任何资源字典中创建一个转换器实例。
<DataGrid ...>
<DataGrid.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</DataGrid.Resources>
<DataGrid.Columns>
<-- ...your other columns. -->
<DataGridTemplateColumn IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<-- ...row and column definitions, other controls. -->
<TextBlock Grid.Column="3"
Text="{Binding Note}"/>
<Button Grid.Column="4"
Name="ButtonAssign"
Visibility="{Binding IsSelected, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Converter={StaticResource BooleanToVisibilityConverter}}"
Content="Assign"
Click="btnAssign_Click"/>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
推荐阅读
- node.js - 如何使用不和谐机器人记录已删除的图像
- momentjs - moment tz 转换字符串
- c# - 启动应用程序时没有“Microsoft.AspNetCore.Identity.UserManager”类型的服务
- algorithm - Cassandra 的代币功能背后的算法是什么?
- linux - 使用 bash,我想在一行上打印一个数字,后跟 2 条路径的大小。即在一行上输出 3 个命令
- spring-webflux - WebFlux过滤器:Flux访问redis,如果ok则运行下一个过滤器,但是不符合
- wpf - 为什么我的 WPF 键绑定到导航命令不起作用?
- python - - 不支持的操作数类型:第 5 章 EX15 的“str”和“int”错误
- powershell - Powershell根据单词过滤行
- c - C 调用 ASM (YASM x86)