无法使用ElementName设置CommandParameter

时间:2012-05-22 23:31:52

标签: wpf xaml

我有一个带有ContextMenu的TreeView,在该菜单中我想绑定到VIewModel上的命令

<TreeView x:Name="treeView"
          ItemTemplate="{StaticResource ItemTemplate}"
          ItemsSource="{Binding View}">

    <TreeView.ContextMenu>
        <ContextMenu>
            <telerik:RadMenuItem Header="Remove" Command="{Binding RemoveCommand}" CommandParameter="{Binding ElementName=treeView, Path=SelectedItem, Mode=OneWay}" />
        </ContextMenu>
    </TreeView.ContextMenu>
</TreeView>

我在输出窗口中收到一个异常,比如

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=treeView'. BindingExpression:Path=SelectedItem; DataItem=null; target element is 'RadMenuItem' (Name=''); target property is 'CommandParameter' (type 'Object')

我实际上使用RadTreeView,但同样适用于TreeView。为什么我无法绑定到TreeView的SelectedItem属性?我尝试过使用RelativeSource AncestorType,同样的问题。

1 个答案:

答案 0 :(得分:2)

问题在于,与Popup控件一样,它是一个不同的可视树。该错误告诉您它正在尝试在“CommandParameter”上找到名为“RadMenuItem”的属性,因为这是它在ContextMenu可视树中的DataContext。

这会对您有所帮助:Placement Target

我最终将MenuItem的CommandTarget属性设置为ContextMenu的PlacementTarget属性,但它看起来并不像你正在采用的方法。即使如此,PlacementTarget也是您正在寻找的。

相关问题