【问题标题】:WPF Databinding with RelativeSource and AncestorType具有 RelativeSource 和 AncestorType 的 WPF 数据绑定
【发布时间】:2010-11-24 09:47:36
【问题描述】:

我正在尝试让一些绑定代码正常工作。基本上,我想将网格上下文菜单元素的 IsEnabled 属性与网格中选定行的值绑定。

我可以用这个:

            <my:DataGrid.ContextMenu>
                <ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}"> 
                    <MenuItem Header="Grant Access" IsEnabled="{Binding Connectable}"/>
                </ContextMenu>
            </my:DataGrid.ContextMenu>

但我想这样做,但它不起作用。它不会出错,只是不会禁用菜单项。知道为什么吗?

            <my:DataGrid.ContextMenu>
                <ContextMenu> 
                    <MenuItem Header="Grant Access" IsEnabled="{Binding Path=SelectedItem.Connectable, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type my:DataGrid}}}"/>
                </ContextMenu>
            </my:DataGrid.ContextMenu>

【问题讨论】:

    标签: c# .net wpf vb.net xaml


    【解决方案1】:

    尝试使用ElementName binding 而不是Ancestor bindingContextMenu 不属于 Grid 的可视化树。

    --编辑--

    啊,我错了。 ElementName 绑定(下面给出的示例)也不适用于 ContextMenu。它不是 DataGrid 的可视化树的一部分。这就是为什么它看不到该 DataGrid 并因此无法引用它的原因。您必须使用第一种方法来完成。

    你为什么不想那样做?

                <DataGrid.ContextMenu>
                    <ContextMenu DataContext="{Binding SelectedItem, ElementName=DataGrid1}">
                        <MenuItem Header="Grant Access"
                                  IsEnabled="{Binding Connectable}" />
                    </ContextMenu>
                </DataGrid.ContextMenu>
    

    【讨论】:

    • 嗨!你知道这样做的语法吗?
    • 嗯,看起来不错,虽然当我尝试它时,我得到了错误(来自输出窗口):System.Windows.Data 错误:4:找不到与引用'ElementName = dataGridInstall'绑定的源。绑定表达式:路径=选定项;数据项=空;目标元素是'ContextMenu'(名称='');目标属性是“DataContext”(类型“对象”)
    • 我就是这么说的。它行不通。您将不得不使用在PlacementTarget.SelectedItem 上使用绑定的第一种方法。
    【解决方案2】:

    如果您在调试模式下查看 Visual Studio 中的输出窗口,您将获得绑定错误的详细信息 - 这可能会对您的问题有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      相关资源
      最近更新 更多