#c# #wpf #xaml #datagrid
#c# #wpf #xaml #datagrid
Вопрос:
Когда пользователь выбирает строку, я хотел бы отобразить кнопку в конце выбранной строки. У вас есть идея, как это сделать?
Я попробовал это так:
<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;
}
Не могли бы вы мне помочь, пожалуйста?
Комментарии:
1. Вы должны добавить кнопку в xaml и привязать ее видимость к
Row.IsSelected
с помощью некоторого преобразователя логического значения в видимость.2. Название вашего вопроса вводит в заблуждение. Вы спрашиваете о скрытии столбца, но в вашем описании говорится, что вы хотите показать или скрыть кнопку в строке. Пожалуйста, уточните, чего вы хотите добиться. Что означает «отображать кнопку в конце выбранной строки»? Кнопка отображается в отдельном столбце. Как определяется этот столбец?
3. Я хочу отобразить кнопку в отдельном столбце. Столбец определяется как: <Сетка> … Column =»3″ Text=»{Примечание к привязке}» /> Column=»4″ Name=»ButtonAssign» Visibility= «Hidden» Content=»Назначить» Click=»btnAssign_Click»/> </Grid>
Ответ №1:
Вы можете привязать Visibility
кнопку к IsSelected
свойству родительского 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>