我有一个带有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,同样的问题。
答案 0 :(得分:2)
问题在于,与Popup控件一样,它是一个不同的可视树。该错误告诉您它正在尝试在“CommandParameter
”上找到名为“RadMenuItem
”的属性,因为这是它在ContextMenu可视树中的DataContext。
这会对您有所帮助:Placement Target
我最终将MenuItem的CommandTarget
属性设置为ContextMenu的PlacementTarget
属性,但它看起来并不像你正在采用的方法。即使如此,PlacementTarget
也是您正在寻找的。 p>