DataGrid中ContextMenu的绑定

6 篇文章 0 订阅
3 篇文章 0 订阅


在WPF中使用DataGrid,有时会用到ContextMenu,当ContextMenu需要绑定DataGrid列的时候,我们按平时的绑定就直接用ElementName的方式了,但在ContextMenu中是不可

以的,可以用以下方式进行绑定:


 <MenuItem ItemsSource="{Binding PlacementTarget.Columns, RelativeSource={RelativeSource AncestorLevel=1, AncestorType={x:Type ContextMenu}, Mode=FindAncestor}}">


在使用MenuItem时,有时会用到模板列,如下:

                        <MenuItem.ItemTemplate>
                            <DataTemplate>
                                <CheckBox x:Name="CurrentCheck" Content="{Binding Header,UpdateSourceTrigger=PropertyChanged}" IsChecked="{Binding Visibility}"/>
                            </DataTemplate>
                        </MenuItem.ItemTemplate>

但当我在后台获取MenuItem的Items的每一个CheckBox时发现获取不到了。。。怎么办呢,最后尝试着用ItemContainerStyle解决了问题,看下边:

Xaml:

  <MenuItem.ItemContainerStyle>
                            <Style TargetType="MenuItem">
                                <Style.Setters>
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate>
                                                <MenuItem>
                                                    <MenuItem.Header>
                                                        <CheckBox x:Name="CurrentCheck" Content="{Binding Header,UpdateSourceTrigger=PropertyChanged}" IsChecked="{Binding Visibility}"/>
                                                    </MenuItem.Header>
                                                </MenuItem>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style.Setters>
                            </Style>
                        </MenuItem.ItemContainerStyle>


CS:

 

  foreach (var item in VisColumn.Items)
            {
                MenuItem itdem = VisColumn.ItemContainerGenerator.ContainerFromItem(item) as MenuItem;
                CheckBox check = itdem.Template.FindName("CurrentCheck", itdem) as CheckBox;
                //......
            }


OK,搞定!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值