当前位置: 首页 > news >正文

【wpf】列表类,用相对源时,如何绑定到子项

前言

在之前的一篇文章 :《【wpf】深度解析,Binding是如何寻找数据源的》https://blog.csdn.net/songhuangong123/article/details/126195727#:~:text=%E3%80%90wpf%E3%80%91%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%EF%BC%8CBinding%E6%98%AF%E5%A6%82%E4%BD%95%E5%AF%BB%E6%89%BE%E6%95%B0%E6%8D%AE%E6%BA%90%E7%9A%84https://blog.csdn.net/songhuangong123/article/details/126195727#:~:text=%E3%80%90wpf%E3%80%91%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%EF%BC%8CBinding%E6%98%AF%E5%A6%82%E4%BD%95%E5%AF%BB%E6%89%BE%E6%95%B0%E6%8D%AE%E6%BA%90%E7%9A%84

我们介绍了,Binding是如何寻找数据源的 ,这次我遇到一个新的情况:

子项的数据结构就是这样:

public class TileItem
{public string Header { get; set; } = "";public int Index { get; set; } = 0;public TileItem(){}
}
<ListBox Name="tileViewControl" ItemsSource="{Binding TileViewItems}"><ListBox.ItemTemplate><DataTemplate><sw:ROIWindowCtrl ScreenNum="{Binding Index}"/></DataTemplate></ListBox.ItemTemplate>
</ListBox>

一般情况下,这样绑定,一点问题没有,Index会自动对应上 ItemsSource 中的子项

但是我这个ROIWindowCtrl 用户控件有点特殊,他应用了MVVM模式,相当于设置了 ROIWindowCtrl 的 DataContext。

根据之前的介绍,在向上找的时候,如果遇到了控件的DataContext被设置了,就不会继续往上找了。

绑定报错:,确实找到了ROIWindowCtrl的DataContext就停了。

但是其实我是希望能找到 ListBox的ItemsSource的!那怎么办呢?

根据上篇文章,我们也做了介绍,那就是相对源。于是我试了这种(错误示范):

<ListBox Name="tileViewControl" ItemsSource="{Binding TileViewItems}"><ListBox.ItemTemplate><DataTemplate><sw:ROIWindowCtrl ScreenNum="{Binding Path=ItemsSource.Index, 
RelativeSource={RelativeSource Mode=FindAncestor,  AncestorType= {x:Type ListBox}}}"/></DataTemplate></ListBox.ItemTemplate>
</ListBox>

首先,我指定了类型为ListBox,然后使用ItemsSource.Index,但是明显有违和感,因为ItemsSource他是个数组,不可能有Index属性,只有他的子项才有Index。

那在使用相对源的情况下如何绑定到子条目上面呢?

解决方案

想到这里貌似就有答案了,于是我改了一下(正确写法):

<sw:ROIWindowCtrl ScreenNum="{Binding 
Path=DataContext.Index, 
RelativeSource={RelativeSource Mode=FindAncestor,  
AncestorType= {x:Type ListBoxItem}}}"/>

就OK了,关键点就是两个

  • 1  DataContext.Index
  • 2  ListBoxItem

意思就是说,我们需要绑定的是 ListBox 的子项 (ListBoxItem 的 DataContext 中的 Index

小结

        这里一直没想到的原因是:xaml中并没有显示的写出ListBoxItem,所以就没想到使用ListBoxItem。但是我们应该认识到,当使用了数据模板,如果有了数据,ListBoxItem就会被实例化出来。所以 ListBoxItem 他其实是存在于ListBox之中的!

相关文章:

【wpf】列表类,用相对源时,如何绑定到子项

前言 在之前的一篇文章 &#xff1a;《【wpf】深度解析&#xff0c;Binding是如何寻找数据源的》https://blog.csdn.net/songhuangong123/article/details/126195727#:~:text%E3%80%90wpf%E3%80%91%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%EF%BC%8CBinding%E6%98%AF%E5%A6%82%E4…...

头歌计算机组成原理实验—运算器设计(3)第3关:4位快速加法器设计

第3关&#xff1a;4位快速加法器设计 实验目的 帮助学生掌握快速加法器中先行进位的原理&#xff0c;能利用相关知识设计4位先行进位电路&#xff0c;并利用设计的4位先行进位电路构造4位快速加法器&#xff0c;能分析对应电路的时间延迟。 视频讲解 实验内容 利用前一步设…...

Java中synchronized的优化

本文介绍为了实现高效并发&#xff0c;虚拟机对 synchronized 做的一系列的锁优化措施 高效并发是从 JDK5 升级到 JDK6 后一项重要的改进项&#xff0c;HotSpot 虚拟机开发团队在 JDK6 这个版本上花费了大量的资源去实现各种锁优化技术&#xff0c;如适应性自旋&#xff08;Ada…...

软件测试技术课程:软件测试流程

软件测试流程如下&#xff1a; 测试计划测试设计测试执行 单元测试集成测试确认测试系统测试验收测试回归测试验证活动 测试计划 测试计划由测试负责人来编写&#xff0c;用于确定各个测试阶段的目标和策略。这个过程将输出测试计划&#xff0c;明确要完成的测试活动&#x…...

【Redis】聊一下缓存双写一致性

缓存虽然可以提高查询数据的的性能&#xff0c;但是在缓存和数据 进行更新的时候 其实会出现数据不一致现象&#xff0c;而这个不一致其实可能会给业务来带一定影响。无论是Redis 分布式缓存还是其他的缓存机制都面临这样的问题。 数据不一致是如何发生&#xff1f; 数据一致…...

Java学习笔记-04

目录 静态成员 mian方法 多态 抽象类 接口 内部类 成员内部类 静态内部类 方法内部类 匿名内部类 静态成员 static关键字可以修饰成员方法&#xff0c;成员变量被static修饰的成员&#xff0c;成员变量就变成了静态变量&#xff0c;成员方法就变成了静态方法static修…...

pubspec.yaml 第三方依赖版本控制

以下是一些常见的版本控制方式&#xff1a; 精确版本号&#xff1a;您可以指定特定的版本号&#xff0c;例如 dependency_name: 1.2.3。这将确保只有指定的版本被安装和使用。 范围约束&#xff1a;您可以使用比较运算符来指定版本范围&#xff0c;例如 dependency_name: ^1.2…...

打印机出现错误0x00000709的原因及解决方法

一般来说&#xff0c;出现错误0x00000709&#xff0c;可能是用户试图设置默认打印机时&#xff0c;系统无法完成操作的错误。这种错误通常发生在Windows 10或Windows 7操作系统上。**驱动人生**分析&#xff0c;其原因可能是以下几种情况&#xff1a; 1、已经设置了另一个打印…...

代码随想录算法训练营第二十九天|491.递增子序列、46.全排列、47.全排列 II

目录 491.递增子序列 46.全排列 47.全排列 II 491.递增子序列 本题和大家刚做过的 90.子集II 非常像&#xff0c;但又很不一样&#xff0c;很容易掉坑里。 代码随想录 视频讲解&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序…...

【Kafka】Kafka监控工具Kafka-eagle简介

Kafka-eagle是一种基于Web的开源管理工具&#xff0c;可以用来监控、管理多个Kafka集群。 下面是使用Docker部署Kafka-eagle的步骤&#xff1a; 下载并安装Docker和Docker Compose。 创建文件夹&#xff0c;例如kafka-eagle&#xff0c;并在其中创建docker-compose.yml文件&a…...

Java操作MongoDB

上一篇文章: http://blog.csdn.net/gaowenhui2008/article/details/40045719 介绍到了在MongoDB的控制台完成MongoDB的数据操作&#xff0c;通过前一篇文章我们对MongoDB有了全面的认识和理解。现在我们就用Java来操作MongoDB的数据。 开发环境&#xff1a; System&#xff1a…...

Java断言(assert)的介绍和使用

Java断言&#xff08;assert&#xff09;的介绍和使用 在Java编程中&#xff0c;断言&#xff08;assert&#xff09;是一种有用的工具&#xff0c;用于在代码中进行条件检查和调试。通过使用断言&#xff0c;我们可以验证程序的逻辑和假设&#xff0c;确保程序在运行时达到预…...

我的世界Fabric mod开发-快速漏斗

前往我的主页以阅读完整内容&#xff0c;并获取源码 DearXuan的主页 MOD介绍 使用漏斗链进行分类或传递物品时,常常会发现漏斗速度太慢,难以收集全部掉落物.或者漏斗太多,影响性能.而现有的漏斗加速mod则是引入新的快速漏斗,存在各种兼容问题.开服时发现paper服务器可以修改原…...

AI“应用商店”来了!OpenAI首批70个ChatGPT Plugin最全梳理

OpenAI放出大招&#xff0c;本周将向所有ChatGPT Plus用户开放联网功能和众多插件本周将向所有ChatGPT Plus用户开放联网功能和众多插件&#xff0c;允许ChatGPT访问互联网并使用70个第三方插件。 本批第三方插件能够全方位覆盖衣食住行、社交、工作以及学习等日常所需&#x…...

NSS LitCTF部分wp

web 1、PHP是世界上最好的语言&#xff01;&#xff01; 直接cat flag flagNSSCTF{11eaebe0-3764-410d-be83-b23532a24235} 2、这是什么&#xff1f;SQL &#xff01;注一下 &#xff01; 直接查询&#xff0c;发现注入点是id 使用sqlmap列出所以数据库 ​sqlmap -u "h…...

【开发者指南】如何在MyEclipse中编辑HTML或JSP文件?(一)

MyEclipse v2022.1.0正式版下载 如果您有HTML或JSP文件要编辑&#xff0c;这里将介绍如何编辑。查找以下信息&#xff1a; 编辑源代码大纲和属性视图参数页面 该功能在MyEclipse中是可用的。 一、HTML / JSP编辑器 要编辑HTML或JSP文件&#xff0c;请执行以下操作当中的一…...

关于博客停更的原因

进入我的主页浏览一下&#xff0c;就可以发现我写到linux就不写了&#xff0c;c后面页不写了&#xff0c;题解也不更新了&#xff0c;确实&#xff0c;我承认我懒惰了&#xff0c;我选择了向后学习&#xff0c;而不是总结&#xff0c;写博客是一个良好的习惯和面试官看到的能够…...

智能感知编码优化与落地实践

作者 | XHF 导读 基于人眼视觉特性出发的感知编码优化技术&#xff0c;成为互联网短视频、OTT 等 UGC 场景的重点优化手段&#xff0c;可以在降低视频码率的同时&#xff0c;提升视频的观看体验。 今天主要有 4 个方面的内容。首先给大家介绍一下感知编码的技术背景&#xff1b…...

OpenCL编程指南-5.1工作项函数-整数函数-公共函数

工作项函数 应用程序使用clEnqueueNDRangeKernel和 clEnqueueTask API将OpenCL中的数据并行和任务并行内核排队。对于一个数据并行内核&#xff08;使用clEnqueueNDRangeKernel排队等待执行)&#xff0c;应用程序会指定全局工作大小&#xff0c;即可以并行执行这个内核的工作项…...

教你接入Midjourney,不用梯子也能玩

1、效果 话不多说&#xff0c;先上最终出图效果&#xff0c; 我给的关键词是一只白色的猫 2、接入流程 API文档可以来这里查&#xff08;可以白嫖100次midjourney出图和10次gpt4体验&#xff09;&#xff0c;我这里精简一下接入流程&#xff0c;方便大家快速接入 2.1、文字生…...

越锻炼越痛竟是方法错了,颈椎病腰间盘突出不能盲目运动!科学防护与康复指南来了

很多人得知自己有颈椎病或腰椎间盘突出后&#xff0c;第一反应就是 "多运动锻炼"&#xff0c;结果不仅没缓解症状&#xff0c;反而越练越痛&#xff0c;甚至导致病情加重。这是因为颈腰椎病患者的脊柱已经受损&#xff0c;错误的运动方式会进一步损伤椎间盘和神经&am…...

为什么92%的AI原生应用无法精准归因故障?曝光3个被忽视的OpenTelemetry SDK陷阱、2个LLM Token级Span拆分反模式

第一章&#xff1a;AI原生软件研发链路追踪系统搭建 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的研发过程高度依赖模型版本、数据集快照、训练参数、推理服务部署状态及用户反馈信号的强关联性。传统APM工具难以刻画从Prompt工程→微调训练→RAG索引更新→LLM网…...

终极frpc-desktop版本发布checklist:确保质量的10个关键步骤

终极frpc-desktop版本发布checklist&#xff1a;确保质量的10个关键步骤 frpc-desktop是一款FRP跨平台桌面客户端&#xff0c;通过可视化配置帮助用户轻松实现内网穿透。本文将分享确保版本发布质量的10个关键步骤&#xff0c;帮助开发团队打造稳定可靠的桌面应用。 1. 版本号…...

higress 这个中登才是AI时代的心头好纤

核心摘要&#xff1a;这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景&#xff0c;告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”&#xff0c;并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一…...

OBS背景移除插件:零绿幕实现专业级直播虚化的终极指南

OBS背景移除插件&#xff1a;零绿幕实现专业级直播虚化的终极指南 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://…...

如何为惠普暗影精灵笔记本解锁完整性能控制权:OmenSuperHub深度解析

如何为惠普暗影精灵笔记本解锁完整性能控制权&#xff1a;OmenSuperHub深度解析 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度&#xff0c;自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否厌倦了官方控制软件…...

CMOS功耗优化实战:静态与动态功耗的深度解析与设计策略

1. CMOS功耗优化的核心挑战 做低功耗芯片设计的朋友们应该都深有体会&#xff0c;CMOS器件的功耗就像个无底洞&#xff0c;稍不注意就会把电池电量吞噬殆尽。我十年前刚入行时&#xff0c;就曾经因为忽视功耗优化&#xff0c;设计出的芯片续航时间直接腰斩。经过这些年的摸爬滚…...

AI直播背景替换终极指南:OBS智能抠像插件完整教程

AI直播背景替换终极指南&#xff1a;OBS智能抠像插件完整教程 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://gitc…...

Vue-Pure-Admin:现代化企业级Vue3管理后台架构深度解析与技术实践

Vue-Pure-Admin&#xff1a;现代化企业级Vue3管理后台架构深度解析与技术实践 【免费下载链接】vue-pure-admin 全面ESMVue3ViteElement-PlusTypeScript编写的一款后台管理系统&#xff08;兼容移动端&#xff09; 项目地址: https://gitcode.com/GitHub_Trending/vu/vue-pur…...

抖音弹幕监听完整实战指南:基于系统代理的高效抓包技术解析

抖音弹幕监听完整实战指南&#xff1a;基于系统代理的高效抓包技术解析 【免费下载链接】DouyinBarrageGrab 基于系统代理的抖音弹幕wss抓取程序&#xff0c;能够获取所有数据来源&#xff0c;包括chrome&#xff0c;抖音直播伴侣等&#xff0c;可进行进程过滤 项目地址: htt…...