【发布时间】:2016-05-06 03:02:06
【问题描述】:
我有一个从 ObservableCollection 填充的上下文菜单。我希望用户能够点击任何这些项目,然后调用一个方法,将点击项目的文本作为参数传递。
我首先关注this question 的答案。但是,我的控制台输出出现错误,并且我的方法没有被调用。
System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“MenuItem”(名称=“myMenu”)上找不到“FunctionToCall”属性。绑定表达式:路径=函数调用; DataItem='MenuItem' (Name='myMenu');目标元素是'MenuItem'(名称='');目标属性是“命令”(输入“ICommand”)
这是我的 xaml
<MenuItem Name="myMenu" Header="display text" ItemsSource="{Binding}" >
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding FunctionToCall, RelativeSource={RelativeSource AncestorType=MenuItem}}"/>
<Setter Property="CommandParameter" Value="{Binding}"/>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
还有我的视图模型代码
RelayCommand _command;
public ICommand FunctionToCall
{
get
{
if (_command == null)
{
_command = new RelayCommand(p => this.InnerMethod(p));
}
return _command ;
}
}
public void InnerMethod(object parameter)
{
....
另一个答案建议尝试在绑定中添加一个或两个 DataContext,我已经尝试过了,尽管它说找不到 DataContext 属性而不是 FunctionToCall,但我仍然得到同样的错误。
我找到了 RelayCommand here 的定义。
【问题讨论】:
-
我认为您的相对来源指向动态创建的
MenuItem,而不是包含您的命令的MenuItem。你能查一下{Binding DataContext.FunctionToCall, ElementName=myMenu}吗? -
收到类似的消息。 “System.Windows.Data 错误:4:找不到与引用'ElementName = myMenu'的绑定源。BindingExpression:Path = DataContext.FunctionToCall;DataItem = null;目标元素是'MenuItem'(名称='');目标属性是“命令”(输入“ICommand”)”
标签: c# wpf xaml data-binding