【发布时间】:2013-05-24 03:26:43
【问题描述】:
花了一整天的时间寻找答案后,我不得不认输并寻求帮助。
我需要做的就是将上下文菜单中的 Header 项绑定到一个属性,但是我尝试的所有方法都失败了。
在后面的代码中,我有一个简单的属性,它根据标志返回一个字符串
如下图
namespace myNamespace
{
public partial class MainWindow : System.Windows.Window
{
// Removed Init code for Clarity ......
public OptMenuText optMenuText = new OptMenuText();
public class OptMenuText
{
public bool menuState { get; set; }
public string menuHeader
{
get { if (menuState)
return "String One";
else
return "String Two";
}
}
}
XAMl 代码有一个 ListView 绑定到一个 ObservableCollection 保存数据和各种 DataTemplates 用于显示 这工作正常。我已经读过上下文菜单不是主要应用程序数据上下文的一部分,并且作为 因此它需要在标签中指定 DataContext(希望我有这个权利)
ListView 中有一个上下文菜单,如下所示
<ListView Name="listView1" Margin="6" SelectionMode="Single"
ItemsSource="{Binding ElementName=This, Path=ConnectCollection}"
ItemTemplateSelector="{StaticResource templateSelector}" IsTextSearchEnabled="False" >
<ListView.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}" >
<MenuItem Header="{Binding menuHeader}" />
<Separator />
<MenuItem Header="Move Item Up" Click="MenuItemUp_Click" />
<MenuItem Header="Move Item Down" Click="MenuItemDown_Click"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
我唯一的问题是我无法将 MenuItem Header 绑定到字符串属性。
报告的错误是
System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“MainWindow”(名称=“This”)上找不到“menuHeader”属性。 BindingExpression:Path=menuHeader; DataItem='MainWindow' (Name='This');目标元素是'MenuItem'(名称='');目标属性是“标题”(类型“对象”)
谁能告诉我哪里出错了。
莎拉
【问题讨论】:
-
您的 ContextMenu XAML 没问题。这暗示未设置 ListView 的 DataContext。尝试通过Binding设置ListView的一些属性(比如BorderThickness),看看是否生效。如果没有,那么肯定是 ListView 的 DataContext 没有正确设置。
标签: wpf binding contextmenu