我正在尝试在文件菜单下实现标准的“最近文件”选项。下面的代码正确显示了选项列表,但是当单击包含fileName的子菜单时,对命令的绑定不起作用。
<MenuItem Header="File">
<MenuItem Header="New File..." Command="{Binding NewFileCommand}" />
<MenuItem Header="Open File..." Command="{Binding OpenFileCommand}" />
<MenuItem Header="Recent Files"
ItemsSource="{Binding Path=RaptManager.RaptConfiguration.RecentFiles}"
Command="{Binding OpenFileCommand}">
<ItemsControl.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding}"/>
<Setter Property="Command" Value="{Binding OpenFileCommand}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</MenuItem>
</MenuItem>
答案 0 :(得分:0)
我不知道您用来表示最近文件的对象是什么类型。我假设您正在使用字符串,尽管您可能也在使用任何其他类型。
您收到此错误是因为绑定框架正在查找名称为OpenFileCommand的属性,该属性用于表示最近的文件而不是视图模型。
所以解决方法是使用元素绑定来绑定视图模型中直接引用视图的DataContext的命令:
为菜单控件命名,例如:
<MenuItem x:Name="Menu" Header="File">
</Menu>
现在您可以对菜单的DataContext执行元素绑定:
<MenuItem Header="Recent Files"
ItemsSource="{Binding Path=RaptManager.RaptConfiguration.RecentFiles}"
Command="{Binding OpenFileCommand}">
<ItemsControl.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding}" />
<Setter Property="Command" Value="{Binding ElementName=Menu, Path=DataContext.OpenFileCommand}" />
</Style>
</ItemsControl.ItemContainerStyle>
</MenuItem>
注意在ItemsControls中的Command属性的Setter样式&#39; ItemContainerStyle,我们引用Menu元素的DataContext属性的Property OpenFileCommand。这是一个元素绑定。如果您想了解更多信息,请查看this链接。
这样,您应该能够将视图命令正确绑定到视图模型中的Command属性。
希望这有帮助!