Использование DataContext родителя для свойства Visibility - PullRequest
1 голос
/ 13 января 2012

У меня есть DataGrid, привязанный к свойству ViewModel типа ObservableCollection. Внутри DataGrid у меня есть несколько DataGridTextColumns, привязанных к элементу ObservableCollection. Мне нужно получить доступ к родительскому DataContext (ViewModel), чтобы установить свойство Visibility одного из DataGridTextColumns. В Интернете предлагается решение:

{Binding DataContext.IsColumnVisible, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyControl}}}

Свойство IsColumnVisible имеет тип System.Windows.Visibility. Такое решение работает для других свойств, таких как DataGridTextColumn.Binding, но не для DataGridTextColumn.Visibility! Есть ли решение для видимости?

РЕДАКТИРОВАТЬ: Я наконец принял следующее решение: Видимость столбца таблицы привязок MVVM

Ответы [ 3 ]

2 голосов
/ 13 января 2012

DataGrid-столбцы являются абстрактными объектами, на них нельзя ориентироваться, используя ElementName (без namescope ) или RelativeSource (без визуального дерева).

Дополнительно DataGrid-столбцы не имеют DataContext ...

0 голосов
/ 13 января 2012

Свяжите свойство Visibility вашего столбца со свойством модели представления. См. следующий вопрос SA .

Другое дело: используйте класс BooleanToVisibilityConverter . Нехорошо, ваша модель представления предоставляет свойство типа (Visibility), которое тесно связано с представлением. Это вводит связь между вашим представлением и моделью представления, которую следует избегать.

Предоставляет bool, а затем позволяет представлению адаптироваться к своей модели представления с помощью конвертера.

0 голосов
/ 13 января 2012

Вы можете использовать BooleanToVisibilityConverter для преобразования свойства видимости Родителя в логическое значение.

http://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...