WPF ContextMenu将某些属性绑定到同一控件的另一个属性

时间:2010-06-14 08:00:00

标签: c# wpf contextmenu bind visibility

我在Window.Resource部分中定义了ContextMenu和ColumnHeaderStyle,我将它用于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&gt; 0属性。

最初基于其他一些treeView控件选择,上下文菜单中没有项目,但我希望根据treeView中的选择在ContextMenu中添加dinamically项目。这部分完成,上下文有这些项目。在某些选择中没有项目,但仍然在网格上它出现一个空的ContextMenu。因此,我认为最简单的方法是将Visibility绑定到同一控件的Items.Count属性。

对不起,如果我的英语不够好,如果我第一次没有说清楚,我会尝试更好地解释。

3 个答案:

答案 0 :(得分:2)

您希望通过RelativeSource绑定,尤其是Self模式 我认为通过阅读thisthis,您将能够实现目标。

然后,您将需要一个绑定转换器将整数值转换为Visibility属性的匹配类型和值。你会找到一个简短的教程here

此致

答案 1 :(得分:1)

使用它可以绑定到同一控件中的属性

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

您还必须使用转换器来实现您想要的效果。

Just in case you need this

答案 2 :(得分:0)

尝试使用转换器将项目计数的值转换为布尔值。所以你最终会得到像

这样的东西
<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/