当我绑定菜单项与一个ObservableCollection的菜单项的只有“内”区域是可点击:如何将ViewModels的ObservableCollection绑定到MenuItem?
alt text http://tanguay.info/web/external/mvvmMenuItems.png
在我查看我有这样的菜单:
<Menu>
<MenuItem
Header="Options" ItemsSource="{Binding ManageMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>
然后我用它绑定它DataTemplate:
<DataTemplate x:Key="MainMenuTemplate">
<MenuItem
Header="{Binding Title}"
Command="{Binding DataContext.SwitchPageCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"
Background="Red"
CommandParameter="{Binding IdCode}"/>
</DataTemplate>
由于每个视图模型中的ObservableCollection ManageMenuPageItemViewModels有一个属性标题和IDCODE,上面的代码工作正常一见钟情。
无论其,问题是,菜单项在DataTemplate中实际上是内部另一个菜单项(,就好像它被绑定两次),使得在与背景以上的DataTemplate =”红色“有一个每个菜单项内的红色框只有这个区域可以被点击,而不是整个菜单项区域本身(例如,如果用户点击选中区域或右边或左边内部cl ickable区域,然后什么也没有发生,而如果你没有一个单独的颜色是非常混乱。)
什么是的MenuItems结合的ViewModels的一个ObservableCollection使每个菜单项里面的整个区域是正确的方法点击?
UPDATE:
所以我做了基于以下建议如下更改,现在有这样的:
alt text http://tanguay.info/web/external/mvvmMenuItemsYellow.png
我只有我的DataTemplate中TextBlock的,但我现在还不能“色全菜单项”,但只是将TextBlock:
<DataTemplate x:Key="MainMenuTemplate">
<TextBlock Text="{Binding Title}"/>
</DataTemplate>
我把命令绑定到Menu.ItemCo ntainerStyle但他们现在不火:
<Menu DockPanel.Dock="Top">
<Menu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Background" Value="Yellow"/>
<Setter Property="Command" Value="{Binding DataContext.SwitchPageCommand,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Menu}}}"/>
<Setter Property="CommandParameter" Value="{Binding IdCode}"/>
</Style>
</Menu.ItemContainerStyle>
<MenuItem
Header="MVVM" ItemsSource="{Binding MvvmMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
<MenuItem
Header="Application" ItemsSource="{Binding ApplicationMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
<MenuItem
Header="Manage" ItemsSource="{Binding ManageMenuPageItemViewModels}"
ItemTemplate="{StaticResource MainMenuTemplate}"/>
</Menu>
你的意思是在Menu.ItemContainerStyle中定义标题/颜色,然后在DataTemplate中放置一个定义Command和CommandParameter的HierarchicalDataTemplate? – 2009-07-01 08:47:32
谢谢,这正是我一直在寻找的。很棒。谢谢! – 2010-05-04 20:06:06
+1 - HierarchicalDataTemplates使得整个问题几乎无关紧要。 – 2010-12-25 18:21:51