WPF属性绑定测试(索引器方式)

WPF DataGrid 全属性详解(分类整理+实用说明) 在 WPF 开发中,DataGrid 是展示和编辑表格数据的核心控件,其属性覆盖布局、数据绑定、交互、样式等多个维度。很多开发者在使用时容易混淆各类属性的作用,尤其是新手常因属性配置不当导致功能异常。本文将 DataGrid 所有核心属性按功能分类整理,包含继承属性和专属属性,附详细说明和使用场景,助力开发者快速上手、精准配置。 阅读详情

小结:

  如果属性绑定路径上的任何可通知变化属性发生改变,其路径及以下路径都视为发生了变化,不管是否是可通知变化属性,都会重新绑定新值。看来微软对于绑定的机制是下了功夫的,如果采用简单的反射,路径寻找的方式,如果页面元素比较多,层次比较多,效率肯定有问题的,看来有时间得反编译,看看他们是如何搞的。下面是测试代码

1)VVM

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;

namespace SilverlightApplication3
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            this.DataContext = new VMDDD();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            ((VMDDD)(this.DataContext)).SetVisible2(false);
        }

        private void button7_Click(object sender, RoutedEventArgs e)
        {
            ((VMDDD)(this.DataContext)).SetVisible(true);
        }
    }

    public class VMDDD : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChanged(string PropertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
            }
        }
        Dictionary<string, CTRL> _Props = new Dictionary<string, CTRL>();
        public Dictionary<string, CTRL> Props
        {
            get
            {
                return _Props;
            }
            set
            {
                _Props = value;
                RaisePropertyChanged("Props");
            }
        }
        public VMDDD()
        {
            _Props.Add("button1", new CTRL() { Name = "hello" });
        }
        public void SetVisible(bool visible)
        {
            //改变属性
            this.Props["button1"].Name = "Albert";
            this.Props["button1"].Visible = visible ? Visibility.Visible : Visibility.Collapsed;
        }
        public void SetVisible2(bool visible)
        {
            //改变更浅处属性
            Dictionary<string, CTRL> theProps = new Dictionary<string, CTRL>();
            theProps.Add("button1", new CTRL() { Name = "good"+new Random().Next(1,10000).ToString() });
            theProps["button1"].Visible = visible ? Visibility.Visible : Visibility.Collapsed;
            this.Props = theProps;
        }
    }
    public class CTRL : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected void RaisePropertyChanged(string PropertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
            }
        }
        private Visibility _Visible;
        public Visibility Visible
        {
            get
            {
                return _Visible;
            }
            set
            {
                _Visible = value;
                RaisePropertyChanged("Visible");
            }
        }
        public string Name { get; set; }
    }
}

 

2)xaml

<UserControl x:Class="SilverlightApplication3.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit">

    <toolkit:DockPanel x:Name="LayoutRoot">
        <Grid Height="40" Name="grid1"  toolkit:DockPanel.Dock="Top" Visibility="{Binding Path=Props[button1].Visible,Mode=TwoWay}">
            <Button Content="Button1" Height="23" HorizontalAlignment="Left" Margin="258,11,0,0" Name="button4" VerticalAlignment="Top" Width="75" />
        </Grid>
        <Grid Height="59" Name="grid2"  toolkit:DockPanel.Dock="Top" >
            <Button Content="Button2" Height="23" HorizontalAlignment="Left" Margin="250,8,0,0" Name="button3" VerticalAlignment="Top" Width="75" />
        </Grid>
        <Grid Height="66" Name="grid3"  toolkit:DockPanel.Dock="Top" >
            <Button Content="Button3" Height="23" HorizontalAlignment="Left" Margin="6,23,0,0" Name="button2" VerticalAlignment="Top" Width="75" />
        </Grid>
        <Grid Height="24" Name="grid4"  toolkit:DockPanel.Dock="Top" VerticalAlignment="Center" UseLayoutRounding="False">
            <Button Content="{Binding Path=Props[button1].Name,Mode=TwoWay}" Height="23" HorizontalAlignment="Left" Margin="65,1,0,0" Name="button5" VerticalAlignment="Top" Width="75" />
        </Grid>
        <Grid Height="30" Name="grid5" toolkit:DockPanel.Dock="Bottom">
            <Button Content="hide" Height="23" Name="button1" Width="75" Margin="127,0,197,6" Click="button1_Click" />
            <Button Content="show" Height="23" Name="button7" Width="75" Margin="227,6,98,1" Click="button7_Click" />
        </Grid>
        <Button Content="Button5" Height="23" Name="button6" Width="75" />
    </toolkit:DockPanel>
</UserControl>

 

WPF数据验证方法详解:5种MVVM实现方式与适合场景 数据验证是MVVM架构中保障数据正确性的关键环节,它决定了用户输入的合法性和业务逻辑的健壮性。在WPF应用开发中,基于MVVM模式实现数据验证有多种技术路径,从经典的IDataErrorInfo到现代的INotifyDataErrorInfo,再到灵活的ValidationRule与附加属性方案。无论选择哪种方式,核心都在于将验证逻辑从View层剥离,沉淀至ViewModel或独立服务,从而支持实时反馈、异步校验和单元测试。理解不同方法的原理与适用边界,才能应对从简单表单到大型企业级客户端的复杂场景。文章聚 阅读详情

相关推荐

WPF之数据绑定基础

数据绑定是WPF(Windows Presentation Foundation)中最强大的特性之一,它实现了UI元素与数据源之间的自动同步。通过数据绑定,开发者可以将界面与业务逻辑分离,实现MVVM(Model-View-ViewModel)等设计模式,提高代码的可维护性和可测试性。数据绑定建立了目标对象(通常是UI元素)和源对象(数据源)之间的连接。当源对象发生变化时,目标对象会自动更新;反之亦然(取决于绑定模式)。数据源/Source绑定对象/Binding目标对象/Target 1.1 绑定的基本组

冰茶的博客 1747

WPF xaml中绑定具有多个参数的索引器

使用用逗号隔开参数,需要用转义符号"\"转义一下。

Akuma 340

WPF技术深度解析与应用实例

WPF 是一种用于创建 Windows 客户端应用程序的 UI 框架,它将界面的定义与逻辑分离,利用 XAML 来描述界面布局和外观,而将逻辑处理放在 C# 或其他 .NET 支持的语言中。WPF 的出现,带来了丰富的视觉效果和控件,极大地提高了开发效率。依赖属性是在基类中定义的,因此任何继承自的类都可以定义依赖属性。依赖属性使用方法注册。数据绑定和依赖属性是WPF框架中构建动态和响应式用户界面的基石。理解它们的工作原理和用法对于开发高质量的WPF应用至关重要。

weixin_35705784的博客 924

c#索引器的使用

索引器(Indexer)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便、直观的被引用。索引器类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。定义了索引器的类可以让您像访问数组一样的使用 [ ] 运算符访问类的成员。 索引器允许类和结构的实例按照与数组相同的方式进行索引,索引器类似与属性,不同之处在于他们的访问器采用参数。被称为有参属性。 案例...

qq_43552118的博客 1430

案例分析|一篇文章带你看懂养鸡场智慧管理系统

养鸡场智慧管理系统是为了满足现代化养鸡业对精细化管理的需求而设计的一款专业软件。随着科技的发展和农业产业的升级,传统的手工记录和管理方式已无法满足高效、准确和实时的数据跟踪需求。本软件旨在通过集成各种功能模块,帮助养鸡场主实现从鸡苗孵化、饲养管理、饲料控制到销售结算等全链条的智能化操作。该系统的核心目标是提升养鸡场的运营效率和盈利能力,通过自动化数据处理,减少人工误差,节省时间和精力。例如,孵化报表和记录模块可以帮助管理者实时监控孵化过程,及时调整策略;

muyu2980的专栏 930

winpcap无法安装提示新版本已经安装解决办法

问题显示如下该问题会导致ensp里的云识别不到网卡可能是因为之前安装了npcap,而且安装时勾选了第四个选项导致无法安装,需要完全卸载npcap解决办法:办法一:在控制面板的程序与卸载里面卸载npcap和winPcap,然后再安装winPcap,如果搜不到往下看办法二:在C:\Windows\SysWOW64目录下搜索wpcap.dll和packet.dll并重命名为wpcap.dll.old和packet.dll.old办法三:如果搜不到这两个文件需要安装win10Pcap才能找到这两个文件下载地址:Wi

qq_73202377的博客 3万+

WPF绑定之索引器值变化通知

背景 在某些应用中,需要在界面上绑定到索引器,并在值发生变化时实时更新。 解决方案 只要将包含索引器的类实现INotifyPropertyChanged接口,并在索引值更改时引发PropertyChanged事件,并将属性名称设置为Item[]即可。示例代码如下: public class NotifyDictionary : INotifyPropertyChanged { ...

weixin_30394333的博客 277

Ubuntu22.04+PX4+Gazebo:从零到一构建无人机仿真开发环境

本文详细介绍了在Ubuntu22.04系统下搭建PX4+Gazebo无人机仿真开发环境的完整流程。从基础环境配置、PX4固件安装到Gazebo仿真环境搭建,提供了实用命令和常见问题解决方案,帮助开发者快速构建高效的无人机开发环境。

weixin_29243279的博客 437

WPF Binding(绑定)详解

WPF Binding(绑定)详解

lvxingzhe3的博客 1万+

Rocky Linux 9 离线环境Docker部署全攻略:从依赖打包到服务启动

本文详细介绍了在Rocky Linux 9纯离线环境中部署Docker的完整流程。从在联网环境精准下载Docker静态二进制包及所有系统依赖RPM包,到在隔离服务器上按顺序安装依赖、部署二进制文件、配置systemd服务并进行权限与网络调优,提供了从零到一的可复现实战指南。文章重点解决了离线部署的核心难题,并分享了搭建私有镜像仓库等进阶技巧,是运维人员在严格网络管控环境下部署容器服务的必备参考。

pytorchlight8的博客 138

服务器被矿工入侵记录

一次服务器被矿工入驻的处理记录

王瑞的技术专栏 1333

DevExpress WPF中文教程:如何使用虚拟源将WPF数据网格绑定到任何数据源?

本文主要介绍如何使用虚拟源将WPF数据网格绑定到任何数据源,欢迎下载最新版组件体验!

Aevget的博客 1028

基于STM32的嵌入式平台实现EtherCAT主站

本文将介绍如何在基于STM32的嵌入式平台上构建EtherCAT主站,并提供相应的源代码。使用SOEM库提供的API函数,我们可以实现与EtherCAT从站设备的实时通信和数据交换。在STM32的代码中,使用SOEM库提供的API函数初始化EtherCAT主站。在SOEM库中,我们可以找到EtherCAT主站的实现代码和相关的API函数。使用SOEM库提供的API函数实现EtherCAT主站的功能,包括发送和接收EtherCAT数据帧、处理从站设备的状态等。确保连接正常并且设备能够相互通信。

CodeSageX的博客 2834

推荐开源项目:Gu.Wpf.DataGrid2D——二维数据绑定的WPF DataGrid增强版

推荐开源项目:Gu.Wpf.DataGrid2D——二维数据绑定的WPF DataGrid增强版 在寻找一个强大且灵活的WPF DataGrid控件,可以轻松处理各种类型的数据源吗?那么,Gu.Wpf.DataGrid2D可能是你的理想选择。这个开源项目提供了一系列附加属性,让WPF DataGrid能够与数组、列表和其他类型的源进行便捷的双向绑定,而且支持自定义列和行头。 项目介绍 Gu.Wpf...

gitblog_00030的博客 721

RISC-V CPU设计(三)---多周期CPU的设计与实现

基本情况 本多周期CPU支持RV32I指令集(fence,ecall,ebreak除外),已通过部分指令的测试,如代码有bug,欢迎指出。 模块划分 代码将CPU划分为以下几个模块: 1.控制单元:ControlUnit 用于产生控制信号,是CPU的大脑,指挥中枢。 2.分支决策单元:BranchUnit 用于决定B型指令是否发生跳转 3.立即数单元:ImmUnit 用于从指令中解析出立即数. 4.寄存器堆:RegisterFile RISC-V的32个寄存器,其中x0寄存器恒为0,不可更改。 5.指令存储

qq_40268672的博客 5542

华为OD机考双机位C卷 - 打印机队列 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 打印机队列

算法大师! 4619

NERDTree 快速上手:把 Vim 文件树装进终端的 3 条路线

NERDTree 是 Vim 的文件树插件,装上即替换内置的 netrw,在终端里用键盘浏览目录、打开文件、执行文件操作。当前版本的核心能力有 3 项:VCS 仓库根定位、会话状态缓存、4 组扩展 API(键映射、菜单、路径过滤、监听器)。 [![NERDTree 文件树窗口效果](https://raw.gitcode.com/gh_mirrors/ne/nerdtree/raw/690d06

gitblog_00282的博客 431

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Gu Wpf DataGrid2D 使用教程

Gu Wpf DataGrid2D 使用教程 项目介绍 Gu Wpf DataGrid2D 是一个针对 WPF DataGrid 的扩展库,它通过附加属性扩展了 DataGrid 的功能,使你可以轻松地将不同类型的二维数据源(如数组、多维列表)绑定到 DataGrid 中。该项目支持多种数据绑定方式,并提供了行号显示、选中单元格的索引跟踪等实用特性。 项目快速启动 安装 首先,你需要通过 NuGe...

gitblog_00651的博客 583

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

WPF MVVM入门实战:从零拆解一个完整练习案例

数据绑定与命令模式是WPF桌面开发的核心机制,通过INotifyPropertyChanged实现属性变更通知,借助ICommand将界面操作与业务逻辑解耦。MVVM模式在此基础上进一步分离视图与数据,使代码可测试、可维护。在表单输入、列表管理、实时校验等场景中,这种分层架构能显著降低界面与逻辑的耦合度。本文以一个完整练习案例为线索,从属性通知、命令绑定到数据校验,逐步拆解WPF中MVVM的落地过程,帮助开发者建立正确的代码组织方式。

diaoju3333的博客 254

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Caffeine vs Amphetamine vs KeepingYouAwake:3款Mac防睡眠神器终极对比

下载大文件到一半、远程任务刚跑起来,Mac 却自动进入了睡眠——这种"关键时刻掉链子"的经历,相信不少 Mac 用户都遇到过。Caffeine、Amphetamine、KeepingYouAwake 这 3 款 Mac 防睡眠菜单栏工具,就是专门解决这个问题的利器。本文将围绕价格、功能、易用性等维度,帮你在 3 分钟内选出最适合自己的 Mac 防睡眠工具。 [![Caffeine Mac防睡眠工

gitblog_01052的博客 834

wpf ui框架_造轮子了!NETCore跨平台UI框架,CPF

CPF(暂时命名)(Cross platform framework),模仿WPF的框架,支持NETCore的跨平台UI框架,暂时不够完善,只用于测试,暂时只支持Windows和Mac。支持数据绑定,CSS,动画。。。可能有人会说,不是有个开源的Avalonia ,我试过,不过他的性能不行,启动速度慢,内存占用高,附带的dll一大堆,他的是Xaml来描述UI的,我的不提供Xaml,直接用...

weixin_39805195的博客 930

某公司WPF面试题(含答案和解析)--2

某公司WPF面试题(含答案和解析)--2

hpx666的博客 647
上一篇: 读《中国正在过大关(底层沦陷与上层逃离)》有感
下一篇: 给动态数据集的字段值变化加事件,更好的模拟DataTable
广州接入
广州接入 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄24年 2224粉丝 731原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值