当前位置: 首页 > 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、文字生…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...