数据绑定到菜单的多种类型的对象

时间:2012-07-16 10:29:32

标签: wpf data-binding menu telerik hierarchicaldatatemplate

我正在开发一个WPF项目,以下是我的菜单

的数据模型的代码
class NavigationMenu
    {
        public abstract class MenuBase
        {
            public MenuBase()
            {
            }

            public MenuBase(string title)
            {
                MenuTitle = title;
            }

            public Guid MenuId { get; set; }
            public string MenuTitle { get; set; }
            public string ImageResourceName { get; set; }
        }

        public class MenuItem : MenuBase
        {
            public MenuItem()
            {

            }

            public MenuItem(string title)
                : base(title)
            {

            }

            public string View { get; set; }
        }

        public class MenuCategory : MenuBase
        {
            public MenuCategory()
            {
                MenuItems = new ObservableCollection<MenuItem>();
            }

            public MenuCategory(string title)
                : base(title)
            {
                MenuItems = new ObservableCollection<MenuItem>();
            }

            public MenuCategory(string CategoryTitle, ObservableCollection<MenuItem> pMenuItems)
                : base(CategoryTitle)
            {
                this.MenuItems = pMenuItems;
            }

            public ObservableCollection<MenuItem> MenuItems { get; set; }
        }

        public class MainMenuItem : MenuBase
        {
            public MainMenuItem()
            {
                MenuCategories = new ObservableCollection<MenuCategory>();
            }

            public MainMenuItem(string title)
                : base(title)
            {
                MenuCategories = new ObservableCollection<MenuCategory>();
            }
            public ObservableCollection<MenuCategory> MenuCategories { get; set; }
        }
    }

RadMenu的XAML如下,

<ui:RadMenu Name="radMenu1" ItemsSource="{Binding MenuBar}" Height="76">

        <ui:RadMenu.ItemTemplate>

            <HierarchicalDataTemplate ItemsSource="{Binding Path=MenuCategories}">
                <StackPanel Height="Auto">
                    <Image MaxWidth="32" MaxHeight="32" Source="{Binding Path=ImageResourceName}" />
                    <TextBlock HorizontalAlignment="Center"> 
                        <TextBlock.Text>
                            <MultiBinding  Converter="{StaticResource myConv}">
                                <Binding Path="MenuId"></Binding>
                                <Binding Path="MenuTitle"></Binding>
                             </MultiBinding>
                        </TextBlock.Text>
                   </TextBlock>
                </StackPanel>
            </HierarchicalDataTemplate>
        </ui:RadMenu.ItemTemplate>
      </ui:RadMenu>

我遇到的问题是,MenuCategories成功显示,但MenuItems内的MenuCategory未显示。很明显,我没有约束MenuItemsMenuCategories。但我不确定如何在MenuItems中绑定DataTemplate?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将模型类绑定到datatemplate

    <HierarchicalDataTemplate DataType="{x:Type NavigationMenu.MenuCategory }" ItemsSource="{Binding Path=MenuItems }">
            <StackPanel Height="Auto">
                <Image MaxWidth="32" MaxHeight="32" Source="{Binding Path=ImageResourceName}" />
                <TextBlock HorizontalAlignment="Center"> 
                    <TextBlock.Text>
                        <MultiBinding  Converter="{StaticResource myConv}">
                            <Binding Path="MenuId"></Binding>
                            <Binding Path="MenuTitle"></Binding>
                         </MultiBinding>
                    </TextBlock.Text>
               </TextBlock>
            </StackPanel>
    </HierarchicalDataTemplate>


         <HierarchicalDataTemplate DataType="{x:Type NavigationMenu.MenuItem }">
            <StackPanel Height="Auto">
                //....
                <TextBlock HorizontalAlignment="Center" Text="{Binding View}"/> 
                //....
            </StackPanel>
    </HierarchicalDataTemplate>