gpt4 book ai didi

c# - 将 ContextMenu 绑定(bind)到 Datagrid 列

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:46 27 4
gpt4 key购买 nike

我正在尝试将 DataGrid 列标题绑定(bind)到它自己的 ContextMenu,如下所示:

 <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>

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

Cannot find source for binding with reference 'ElementName=AllLogs'. BindingExpression:Path=Columns; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')


编辑:与 ComboBox 的绑定(bind)按预期工作

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

最佳答案

你应该先设置ContextMenuDataContext,这样绑定(bind)到Menu Item的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>

关于c# - 将 ContextMenu 绑定(bind)到 Datagrid 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33482657/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com