我想在WPF 4.5中使用MVVM模式實現功能區控件的應用程序菜單。因此,我創建了一個ApplicationMenuViewModel,其中包含AbstractApplicationMenuItemViewModel的可觀察集合,該集合是用於統一類的抽象類... SplitItem和... Item。 SplitItem應該能夠包含其他RibbonApplicationMenuSplitItems或僅包含RibbonApplicationMenuItems的任意級別的層次結構。因此它包含一個ObservableCollection,它可能包含... SplitItems或普通... Items。 由於其他架構原因,ApplicationMenu本身是通過工廠類提供的。我現在遇到的問題是ApplicationMenu中根本沒有顯示任何內容。 ViewModel實例化正確,所以我認爲這個問題主要是由於我抽象了ApplicationMenuSplitItemViewModel和ApplicationMenuViewModel中可能包含的兩個不同項目。 所以問題是什麼是最靈活,可維護和簡單的方式來實現模板和/或樣式來使RibbonApplicationMenu顯示? 目前下面的模板應用:MVVM功能區應用程序菜單實現(WPF 4.5功能區)
<!--Ribbon Application Menu Styling and Templating-->
<DataTemplate DataType="{x:Type rvmmnu:ApplicationMenuViewModel}">
<RibbonApplicationMenu ItemsSource="{Binding Children}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type rvmmnu:ApplicationMenuItemViewModel}">
<RibbonApplicationMenuItem Header="{Binding DisplayName}"
ImageSource="{Binding ImageSource}"
Command="{Binding Command}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type rvmmnu:ApplicationMenuSplitItemViewModel}">
<RibbonApplicationSplitMenuItem ItemsSource="{Binding Children}"
Header="{Binding DisplayName}"/>
</DataTemplate>
功能區本身與此XAML實例:
<Ribbon DockPanel.Dock="Top" ItemContainerStyle="{StaticResource ResourceKey=ribbonTabStyle}"
ItemsSource="{Binding Path=Ribbon.Tabs}"
ApplicationMenu="{Binding Path=Ribbon.ApplicationMenu}"/>
在這種配置下應用程序菜單顯示什麼的時刻。我想這個問題是由於我抽象出菜單中包含的兩個層次項之間的差異。我正在考慮爲RibbonApplicationMenu和RibbonApplicationMenuSplitItem使用自定義模板選擇器。我正在考慮的另一種方法是將不同的對象類型(... SplitItem和... Item)分成兩個不同的集合,並對ItemsSource屬性使用多重綁定。但我對這些方法並不滿意,因爲我認爲有一種更簡單的方法來實現我想要的。
嗨,不知道你是否會看到這個。我偶然發現了你的代碼,我正試圖學習如何將viewModels綁定到功能區。你是否可以共享代碼(下載)以便我可以看到並學習謝謝 – developer9969