當我綁定菜單項與一個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