WPF ContextMenu привязывает какое-то свойство к другому свойству того же элемента управления

У меня есть ContextMenu и ColumnHeaderStyle, определенные в разделе Window.Resource, который я использую для DataGrid ColumnHeader. Мой код выглядит примерно так:

<ContextMenu x:Key="cm_columnHeaderMenu"/>

<Style x:Key="DefaultColumnHeaderStyle" TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="ContextMenu" Value="{StaticResource cm_columnHeaderMenu}" />
</Style>

<DataGrid Grid.Column="2" Grid.Row="1" x:Name="dgridFiles" IsReadOnly="True" 
 ColumnHeaderStyle="{StaticResource DefaultColumnHeaderStyle}">

Я хочу знать, могу ли я (и если ответ верный, то КАК я могу это сделать) привязать свойство ContextMenu Visibility к тому же свойству элемента управления ContextMenu Items.Count> 0.

Первоначально на основе некоторых других выбранных элементов управления treeView, которые были сделаны, в контекстном меню не должно быть элементов, но я хочу добавить динамические элементы в ContextMenu на основе выбора в treeView. Эта часть сделана, в контексте есть эти элементы. В некоторых выборках нет элементов, но все же в сетке появляется пустое ContextMenu. Поэтому я считаю, что проще всего было бы привязать свойство Visibility к Items.Count того же элемента управления.

Извините, если мой английский недостаточно хорош, я постараюсь объяснить лучше, если я не проясню в первый раз.


person user366113    schedule 14.06.2010    source источник


Ответы (3)


вы хотите привязать через RelativeSource, особенно в режиме Self.
Я думаю, прочитав это или this, вы сможете для достижения своей цели.

Затем вам понадобится преобразователь привязки для преобразования целочисленных значений в соответствующий тип и значения свойства Visibility. Вы найдете краткое руководство здесь.

С Уважением

person DHN    schedule 14.06.2010

Используя это, вы можете привязать свойство к тому же элементу управления

Visibility="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}"

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

На случай, если вам это понадобится

person Amsakanna    schedule 14.06.2010

Попробуйте конвертер преобразовать значение количества элементов в логическое. Таким образом, вы получите что-то вроде

<ContextMenu Visibility={Binding RelativeSource={RelativeSource Self},
 Converter={StaticResource ItemsToVisibilityConverter}, Path=Items.Count}} />

Если это не сработает, попробуйте это с триггерами данных (вам все равно нужен конвертер, и это показывает, что конвертер работает):

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a8ad8c14-95aa-4ed4-b806-d0ae874a8d26/

person Lunivore    schedule 14.06.2010
comment
Items.Count должен быть, кстати, преобразован в Visibility перечисление - person Amsakanna; 14.06.2010