【WPF绑定2】 ComboBox SelectedValue复杂数据类型绑定

news2025/1/24 22:40:38

前言

这次绑定是一次非常痛苦的经历,因为SelectedValue总是不能生效!我一度怀疑是wpf的Bug。其实还是自己没搞清楚。

在之前的一篇文章中:

http://t.csdn.cn/A4W6Ahttp://t.csdn.cn/A4W6A我也写个ComboBox的绑定,但是当时没有指定ItemsSource,而是将子项直接写道前台里面。

因为当时每个条目就是简单的字符串而且是固定的。而这次每个Items都是一个复杂的数据结构,而且ItemsSource会发生变化。

解决方案

想让SelectedValue绑定生效,关键三个属性:

  • ItemsSource
  • SelectedValue (也可以使用SelectedItem进行替换!)
  • DisplayMemberPath

前台代码:

<ComboBox hc:TitleElement.Title="选择输入"                      
             ItemsSource="{Binding ListInput}"                                    
             SelectedValue="{Binding proprecessImage.CurSelectInput, Mode=TwoWay}"
             DisplayMemberPath="DisplayName">
</ComboBox>

ItemsSource,就是我们数据源,它决定了ComboBox 有多少个Items。

ItemsSource的数据源也就是变量ListInput:

public ObservableCollection<ToolsNodeItem> ListInput { get; set; } = new ObservableCollection<ToolsNodeItem>();

ListInput中的子项的类型是ToolsNodeItem:

    public class ToolsNodeItem:BindableBase
    {
        public string Icon { get; set; }
        public string EditIcon { get; set; }

        private string dsplayName="";

        public string DisplayName
        {
            get { return dsplayName; }
            set { SetProperty(ref dsplayName, value); }
        }

        public string TypeName { get; set; }
    }

DisplayMemberPath,决定你的每个Item中在界面上显示的内容!因为此时Item是个复杂类型(ToolsNodeItem),所以界面是不知道你想显示啥的。如果不指定DisplayMemberPath你会看到这样的结果:

 因为,不知道显示啥,所以显示了Item的类型,相当于是将Item进行了toString()。

所以我们通过DisplayMemberPath告诉wpf我们想显示ToolsNodeItem中的一个属性,这我选择的是DisplayName。注意,DisplayMemberPath直接赋值类型的字符串名称,不需要bingding表达式

最后是今天的主角,SelectedValue,首先我们声明一个ToolsNodeItem类型的变量:

/// <summary>
/// 当前选择的输入
/// </summary>
private ToolsNodeItem curSelectInput = new ToolsNodeItem();
public ToolsNodeItem CurSelectInput
{
    get { return curSelectInput; }
    set { SetProperty(ref curSelectInput, value); }
}

然后通过通过bingding表达式绑定即可!

SelectedValue="{Binding proprecessImage.CurSelectInput, Mode=TwoWay}"

小结

1 以上通知形式写法基于prism。可以改为其他的通知形式。

2 DisplayMemberPath 和SelectValuePath 是异同点的。

不同点是:DisplayMemberPath 是界面显示相关的。SelectValuePath是和最终Item获取到的值相关的。

相同点是:都是对复杂的结构的Item的类型进行筛选。

我这里因为需要ToolsNodeItem的完整值,就不需要SelectValuePath进行筛选,

但是又需要对界面显示筛选,所以这里就用到了DisplayMemberPath

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/105056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css实现两列/三列布局

文章目录css实现两列/三列布局两列布局三列布局css实现两列/三列布局 两列布局 第一种方式&#xff1a;浮动实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible"…

点击类化学试剂绿色固体ICG-TCO,取用时保持干燥的环境

一、试剂反应基团&#xff08;Reagent reaction group&#xff09;&#xff1a; 点击类化学试剂包括&#xff1a;DBCO、TCO、Tetrazine、Azide、Alkyne、Auxiliary reagents等。其中TCO又包含了与氨基反应的&#xff0c;与羧基反应的&#xff0c;与荧光素交联的&#xff0c;与…

非零基础自学Golang 第14章 反射 14.3 对结构体的反射操作

非零基础自学Golang 文章目录非零基础自学Golang第14章 反射14.3 对结构体的反射操作14.3.1 获取结构体成员类型14.3.2 获取结构体成员字段的值14.3.3 反射执行结构体方法第14章 反射 14.3 对结构体的反射操作 反射不仅可以获取普通类型变量的值&#xff0c;还可以获取结构体…

中钢矿院冲刺科创板:上半年营收4亿 拟募资5.54亿

雷递网 雷建平 12月20日中钢集团马鞍山矿山研究总院股份有限公司&#xff08;简称&#xff1a;“中钢矿院”&#xff09;日前递交招股书&#xff0c;准备在科创板上市。中钢矿院计划募资5.54亿元&#xff0c;其中&#xff0c;1.41亿元用于国家级研发平台研发能力提升与矿产资源…

Python图像处理【5】图像扭曲与逆扭曲详解

图像扭曲与逆扭曲详解0. 前言1. 使用 scikit-image warp() 函数执行图像变换1.1 scikit-image warp() 函数原理1.2 利用 warp() 函数实现图像变换2. 漩涡变换详解2.1 旋涡变换原理2.2 使用 scikit-image warp() 实现旋涡变换2.3 使用 scipy.ndimage 实现漩涡变换3. 使用 scikit…

如何抓住2023年技术创新的浪潮和趋势?

编辑 | 阿冒 设计 | 沐由千百年以来&#xff0c;技术的进步始终与人类社会的发展紧密相连&#xff0c;每一次重大的技术变革均对社会带来的深刻而持久的影响。最近半个世纪以来的表征&#xff0c;尤其明显。数字技术&#xff0c;正在以其“春风化雨”的姿态滋润着万物&#…

界面组件DevExpress v22.2官宣发布——正式支持.NET 7

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具&#xff0c;该组件拥有众多新产品和数十个具有高影响力的功能&#xff0c;可为桌面、Web和移动应…

最新系统MacOs13 Ventura(M1/M2芯片) + Parallels Desktop 18(PD18史上最强虚拟机)永久使用攻略

众神殿内&#xff0c;高朋满座&#xff0c;胜友如云&#xff0c;Vmware、VirtualBox、Utm等虚拟机大神群英荟萃&#xff0c;只见位于C位王座上的Parallels怅惘抬头&#xff0c;缓缓逡巡&#xff0c;睥睨群小&#xff0c;目光到处&#xff0c;无人敢抬头对视。 是的&#xff0c…

网络空间安全中高职业院校职技能大赛——借助.htaccess上传绕过

1.选择pass-04 查看源码发现 .php .php5 …这些文件都不能上传 2.修改一句话木马为a.jpg 3.新建.htaccess文件&#xff0c;内容如下 上传.htaccess 编辑菜刀去连接&#xff0c;取得shell

C++数学与算法系列之初等数论

1. 数 什么是数&#xff1f; 一个用作计数、标记或用作量度的抽象概念。 代表数的一系列符号&#xff0c;包括数字、运算符号等统称为记数系统。 在日常生活中&#xff0c;数通常出现在标记&#xff08;如公路、电话和门牌号码&#xff09;、序列号和编码上。在数学里&…

一年后,那个残酷的 Log4j 漏洞仍然潜伏

©网络研究院 一年前&#xff0c;随着俄罗斯在其与乌克兰的边境集结军队以及Covid-19 Omicron 变种开始在全球范围内激增&#xff0c;Apache 软件基金会披露了一个漏洞&#xff0c;在全球科技行业掀起了一阵狂热。 该错误称为 Log4Shell&#xff0c;在无处不在的开源日志…

《MySQL系列-主从相关》Docker安装MySQL,实现主从复制

Docker安装MySQL&#xff0c;实现主从复制 一、前言 1 Docker安装MySQL 参考历史文章Docker安装MySQL&#xff0c;准备两台MySQL容器 master节点 容器名称 MySQL01 容器ID faf2312fd62a 端口 33061 slave节点 容器名称 MySQL01 容器ID dfc693c2bb04 端口 33062 2 M…

【Numpy基础知识】Datatypes数据类型

Numpy 数据类型 来源&#xff1a;Numpy官网&#xff1a;https://numpy.org/doc/stable/user/basics.html 文章目录Numpy 数据类型导包【1】数组类型和类型之间的转换【2】数组标量【3】溢出错误【4】扩展精度导包 import numpy as np【1】数组类型和类型之间的转换 NumPy支持…

弃购频频发生?跨境电商卖家必知的弃购原因以及解决方案!

关键词&#xff1a;弃购、跨境电商卖家 电子商务商店平均有 75% 的销售额因数字购物车放弃而损失。 本文分解了放弃购物车的主要原因&#xff08;以及如何预防&#xff09;。 放弃购物车的十大原因 放弃购物车是一个问题。正如我们在介绍中分享的那样&#xff0c;据估计&#…

使用css3实现一个超浪漫的新年倒计时

新年快到了&#xff0c;使用css3实现一个超浪漫的新年倒计时吧&#xff0c;希望大家喜欢。 目录 1 实现思路 2 实现浪漫的心形背景 3 布局小时分钟和秒的区域 4、js倒计时 5、然后就是将所得的小时、分钟、秒对DOM进行赋值 6、每秒一更新 7、补充知识点1- 倒计时为什…

爆款微信小游戏,你都知道几款?

紧随微信2017年上线小程序平台&#xff0c;11月份便开始向各大小游戏厂商发送邀请函开发微信小游戏。2017年12月28日&#xff0c;微信正式对外开放微信小游戏。 就微信小游戏来说&#xff0c;其开发者数量在今年已经超过10万人&#xff1b;而产品方面除了《跳一跳》《羊了个羊…

全网首次揭秘:微秒级“复活”网络的HARP协议及其关键技术

导读&#xff5c;云计算时代&#xff0c;承担服务器之间数据传输工作的交换机成了数据中心的“神经枢纽”&#xff0c;一旦出故障将波及上层业务。然而单个交换机故障时&#xff0c;腾讯云的新一代高性能网络却可以在100微秒内找到新的通路实现0断链&#xff0c;做到高可用、高…

基于springboot layui疫苗接种信息管理系统源码

开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;springboot layui 伴随着社会的迅速发展&#xff0c;电子计算机对世界的作用影响是全面并且长久的。人们日常生活消费综合应用水平的持续增高&#xff0c;生活中人…

[ 数据结构 -- 手撕排序算法总结篇 ]

文章目录前言一、常见的排序算法二、测试排序的性能对比随机数排序时间对比有序数排序时间对比三、排序算法的复杂度四、排序算法的稳定性前言 手撕排序算法总结 本篇文章进行总结&#xff0c;我会对比并分析常见的几种排序&#xff0c;例如像插入排序&#xff0c;冒泡排序&am…