2015-11-02 82 views
0

我想DataGrid列标题绑定到自己的ContextMenu这样的:绑定文本菜单到DataGrid列

<DataGrid x:Name="AllLogs"> 
    <DataGrid.ContextMenu> 
     <ContextMenu> 
       <MenuItem Header="Show/Hide Columns" 
         ItemsSource="{Binding ElementName=AllLogs, Path=Columns}"> 
        <MenuItem.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Header}"></TextBlock> 
         </DataTemplate> 
        </MenuItem.ItemTemplate> 
       </MenuItem> 
      </ContextMenu> 
     </DataGrid.ContextMenu> 
    </DataGrid> 

它总是发送以下错误输出:

找不到源结合参考 'ElementName = AllLogs'。 BindingExpression:路径=列; DataItem = null;目标元素是'MenuItem'(Name =''); target属性 是 '的ItemsSource'(类型 '的IEnumerable')


编辑:用ComboBox作品绑定,预期

<ComboBox ItemsSource="{Binding ElementName=AllLogs, Path=Columns}"> 
     <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox Content="{Binding Header}"/> 
       </DataTemplate> 
     </ComboBox.ItemTemplate> 
</ComboBox> 

回答

0

我不知道每RadGrivView控制发言权,但该错误意味着它无法在您的元素上找到名为“Columns”的IEnumerable属性。你确定这是一个公开的控制集合吗?

+0

RadGridView是telerik的控件,它是从DataGrid派生而来的。是的,它有可公开访问的获取者和私人二传手! – Marshal

0

您应该首先设置DataContextContextMenu,以便ItemsSource绑定到菜单项可以继承相同的DataContext。

<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}"> 
<MenuItem Header="Show/Hide Columns" 
    ItemsSource="{Binding Columns}"> 
    <MenuItem.ItemTemplate> 
     <DataTemplate> 
       <TextBlock Text="{Binding Header}"></TextBlock> 
     </DataTemplate> 
    </MenuItem.ItemTemplate> 
</MenuItem> 
</ContextMenu> 
+0

发布之前您是否尝试过?绑定datacontext没有意义,我没有访问datacontext中的任何属性。 – Marshal