WPF Hide DataGridColumn через привязку - PullRequest
3 голосов
/ 25 марта 2010

Почему-то я не могу скрыть DataGridColumn набора инструментов WPF. Я пытаюсь сделать следующее:

<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 возвращает значение Visibility и является свойством зависимости

Я полностью застрял, я был бы очень признателен за помощь! Большое спасибо!

Ответы [ 3 ]

6 голосов
/ 25 марта 2010

Опубликовано в этом вопросе:

WPF DataGrid: привязка видимости DataGridColumn к ContextMenu MenuItems Ischeked (MVVM)

Fubzot использует код привязки, аналогичный

Visibility='{Binding (FrameworkElement.DataContext).IsReadOnly,
RelativeSource={x:Static RelativeSource.Self}}'

Вы также можете проверить это:

Пересылка DataContext DataGrid в его столбцы.

, который также связан в вышеуказанном вопросе.

Только для моей информации: вы видите какие-либо ошибки Binding в вашем окне Output, используя ваш текущий код?

5 голосов
/ 25 марта 2010

Если вы хотите привязать к свойству DataGridColumn IsReadOnly, просто добавьте RelativeSource к привязке (и конвертеру):

<BooleanToVisibilityConverter x:Key="boolToVis" />

...

<dg:DataGridTemplateColumn Header="Item Description" Visibility="{Binding IsReadOnly, RelativeSource={RelativeSource Self}, Converter={StaticResource boolToVis}}">

Кроме того, похоже, этот вопрос StackOverflow может быть связан с вашей проблемой.

0 голосов
/ 25 марта 2010

вам нужно использовать конвертер

 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. ОБРАЗЕЦ

...