WPF Скрыть DataGridColumn через привязку
По какой-то причине я не могу скрыть WPF Toolkit DataGridColumn. Я пытаюсь сделать следующее:
<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly}">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=ItemDescription}" />
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
Это не работает, поскольку он ищет свойство IsReadOnly в ItemSource (а не свойство текущего класса).
Если добавить это как свойство класса ItemSource, который реализует INoifyPropertyChanged, он все равно не скрывает столбец. Есть ли способ обойти это? Я хочу, чтобы столбец спрятался, когда кнопка нажимает на свойство IsReadOnly.
Предположим, что IsReadOnly возвращает значение видимости и является свойством зависимости
Я полностью застрял, я был бы очень признателен за помощь! Большое спасибо!
Ответы
Ответ 1
Если вы хотите привязываться к свойству DataGridColumn
IsReadOnly
, просто добавьте RelativeSource
в Binding (и конвертер):
<BooleanToVisibilityConverter x:Key="boolToVis" />
...
<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly, RelativeSource={RelativeSource Self}, Converter={StaticResource boolToVis}}">
Кроме того, похоже, что fooobar.com/questions/6396/... может быть связан с вашей проблемой.
Ответ 2
Размещено в этом вопросе:
WPF DataGrid: привязка видимости DataGridColumn к ContextMenu MenuItems Ischeked (MVVM)
Fubzot использует код привязки, аналогичный
Visibility='{Binding (FrameworkElement.DataContext).IsReadOnly,
RelativeSource={x:Static RelativeSource.Self}}'
Вы также можете проверить это:
Пересылка DataCrids DataContext в его столбцы..
который также связан в вышеуказанном вопросе.
Только для моей информации: вы видите какие-либо ошибки привязки в вашем окне вывода с использованием вашего текущего кода?
Ответ 3
вам нужно использовать конвертер
Public Class BooleanToVisibilityConverter
Implements IValueConverter
Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
If targetType Is GetType(Visibility) Then
If CBool(value) = True Then
Return Visibility.Hidden
Else
Return Visibility.Visible
End If
Else
Return Nothing
End If
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return Nothing
End Function
End Class
то вы используете конвертер в XAML. ОБРАЗЕЦ