2015-11-02 56 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