当前位置:   article > 正文

WPF —— Menu数据绑定实例_menuitem 绑定

menuitem 绑定

{Binding} 因为我们操作这个集合对象,而不是集中某个对象,所以直接写{Binding}就行
            如果绑定是list集合的某个对象属性时候,需要{bindingvpath = 属性名}

  1. <Menu x:Name="m1" ItemsSource="{Binding}">
  2. </Menu>

树形数据模板 : 分层数据模板,主要是用于MenuItem和TreeViewItem控件上
                DATaType属性,指定控件中使用的模型类
                ItemsSource 树形控件使用的的数据源,下一层的数据源
                树形标签的内容区域对象的属性

1.1 定义模型类,一个属性是菜单标题属性,另外一个属性是保存子菜单对象集合
 *  定义构造函数,在构造函数进行判断如果有父级的菜单,把当前对象添加到父级菜单list属性里面,

树型模型的定义 menu的标题定义
    // 整个对象需要放进一个list集合中里面SubMenus属性保存的子集的菜单

  1. public class MenuInfo
  2. {
  3. // 一级菜单标题使用字符串进行
  4. public string MenuName { get; set; } // 存储的是首页娱乐 军事 等一级标题
  5. // 子集菜单标题
  6. public List<MenuInfo> SubMenus { get; set; }
  7. public MenuInfo(string m1,MenuInfo?parMenu)
  8. {
  9. MenuName = m1;
  10. if (parMenu != null)
  11. {
  12. // 不等于空的前提是 new MenuInfo("首页",MenuInfo)
  13. // 如果new MenuInfo("首页",MenuInfo) 证明没有子集菜单
  14. // 如果他的父级菜单是否有子集菜单,如果有直接加进去 如果没有新建一个空的集合
  15. List<MenuInfo> list = parMenu.SubMenus ?? new List<MenuInfo>();
  16. list.Add(this);
  17. parMenu.SubMenus = list;
  18. }
  19. }
  20. }


1.2 给Menu标签绑定list集合  注意创建对象时候 第二参数传递是父级菜单对象
 

  1. 首页的数据源 不要求有子集菜单
  2. MenuInfo houmCaiDan = new MenuInfo("首页", null);
  3. //军事的一级菜单
  4. MenuInfo junshiCaiDan = new MenuInfo("军事",null);
  5. //军事的二级菜单
  6. MenuInfo junshiCaiDan_1 = new MenuInfo("军事1", junshiCaiDan);
  7. zongList.Add(houmCaiDan);
  8. zongList.Add(junshiCaiDan);

 1.3 找到menu设置dataContext

 this.m1.DataContext = zongList;


 1.4 添加HierarchicalDataTemplate模版 ,绑定数据是总的list的某个对象下的Submens子菜单集合,(绑定的是子集菜单对象集合)

  1. <HierarchicalDataTemplate DataType="{x:Type et:MenuInfo}"
  2. ItemsSource="{Binding Path=SubMenus}">
  3. <TextBlock Text="{Binding Path=MenuName}" MouseDown="f1"></TextBlock>
  4. </HierarchicalDataTemplate>

1.5 添加textblock 绑定子集菜单标题

  1. private void f1(object sender, MouseButtonEventArgs e)
  2. {
  3. // MessageBox.Show(((TextBlock)sender).Text.ToString());
  4. string name = ((TextBlock)sender).Text.ToString();
  5. if (name == "首页")
  6. {
  7. this.f2.Navigate(new Home());
  8. }
  9. else if (name == "娱乐")
  10. {
  11. this.f2.Navigate(new YuLe());
  12. }
  13. else if (name == "军事1")
  14. {
  15. MessageBox.Show(name);
  16. }
  17. else if (name == "俄罗斯恐怖袭击事件")
  18. {
  19. this.f2.Navigate(new ELuosi());
  20. }
  21. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/758401
推荐阅读
相关标签
  

闽ICP备14008679号