WPF —— Menu数据绑定实例

{Binding} 因为我们操作这个集合对象,而不是集中某个对象,所以直接写{Binding}就行

如果绑定是list集合的某个对象属性时候,需要{bindingvpath = 属性名}

XML 复制代码
<Menu x:Name="m1" ItemsSource="{Binding}">
    
</Menu>

树形数据模板 : 分层数据模板,主要是用于MenuItem和TreeViewItem控件上

DATaType属性,指定控件中使用的模型类

ItemsSource 树形控件使用的的数据源,下一层的数据源

树形标签的内容区域对象的属性

1.1 定义模型类,一个属性是菜单标题属性,另外一个属性是保存子菜单对象集合

* 定义构造函数,在构造函数进行判断如果有父级的菜单,把当前对象添加到父级菜单list属性里面,

树型模型的定义 menu的标题定义

// 整个对象需要放进一个list集合中里面SubMenus属性保存的子集的菜单

cs 复制代码
public class MenuInfo
{
    // 一级菜单标题使用字符串进行
    public string MenuName { get; set; } // 存储的是首页娱乐 军事 等一级标题
    
    // 子集菜单标题
    public List<MenuInfo> SubMenus { get; set; }

    public MenuInfo(string m1,MenuInfo?parMenu)
    {
        MenuName = m1;
        if (parMenu != null)
        {
            // 不等于空的前提是 new MenuInfo("首页",MenuInfo)
            // 如果new MenuInfo("首页",MenuInfo) 证明没有子集菜单
            // 如果他的父级菜单是否有子集菜单,如果有直接加进去 如果没有新建一个空的集合
            List<MenuInfo> list = parMenu.SubMenus ?? new List<MenuInfo>();
            list.Add(this);
            parMenu.SubMenus = list;
        }
    }

}

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

cs 复制代码
首页的数据源 不要求有子集菜单
            MenuInfo houmCaiDan = new MenuInfo("首页", null);

            //军事的一级菜单
            MenuInfo junshiCaiDan = new MenuInfo("军事",null);
            //军事的二级菜单
            MenuInfo junshiCaiDan_1 = new MenuInfo("军事1", junshiCaiDan);
           
            zongList.Add(houmCaiDan);
            zongList.Add(junshiCaiDan);

1.3 找到menu设置dataContext

this.m1.DataContext = zongList;

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

XML 复制代码
<HierarchicalDataTemplate DataType="{x:Type et:MenuInfo}"
    ItemsSource="{Binding Path=SubMenus}">
    <TextBlock Text="{Binding Path=MenuName}" MouseDown="f1"></TextBlock>
</HierarchicalDataTemplate>

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

cs 复制代码
private void f1(object sender, MouseButtonEventArgs e)
{
    // MessageBox.Show(((TextBlock)sender).Text.ToString());
    string name = ((TextBlock)sender).Text.ToString();
    if (name == "首页")
    {
        this.f2.Navigate(new Home());
    }
    else if (name == "娱乐")
    {
        this.f2.Navigate(new YuLe());
    }
    else if (name == "军事1")
    {
        MessageBox.Show(name);
    }
    else if (name == "俄罗斯恐怖袭击事件")
    {
        this.f2.Navigate(new ELuosi());
    }

}
相关推荐
艺杯羹10 小时前
Git版本控制深度复盘:从入门到精通的完整指南
git·wpf·版本控制·git学习·git复盘
玄〤20 小时前
RabbitMQ 入门篇总结(黑马微服务课day10)(包含黑马商城业务改造)
java·笔记·分布式·spring cloud·微服务·rabbitmq·wpf
向哆哆2 天前
CANN HCCL集合通信库在分布式训练中的高性能通信方案
分布式·wpf·cann
周杰伦fans2 天前
ai-skill开发WPF踩坑
wpf
听麟2 天前
HarmonyOS 6.0+ APP智能快递代收管理系统开发实战:定位追踪与取件提醒落地
深度学习·3d·华为·wpf·harmonyos
棉晗榜3 天前
wpf将svg的多个path数据转为wpf的矢量Path几何图形数据
wpf
暖馒3 天前
Modbus应用层协议的深度剖析
网络·网络协议·c#·wpf·智能硬件
R1nG8633 天前
HCCL vs NCCL代码级对比 hccl/algorithms/ vs nccl/src/collectives/ Ring算法实现差异
wpf·cann
风指引着方向4 天前
归约操作优化:ops-math 的 Sum/Mean/Max 实现
人工智能·wpf
听麟4 天前
HarmonyOS 6.0+ 跨端智慧政务服务平台开发实战:多端协同办理与电子证照管理落地
笔记·华为·wpf·音视频·harmonyos·政务