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

c#-WPF使用类和子类绑定到DataContext

c#-WPF使用类和子类绑定到DataContext
2019-11-02 14:05:16 阅读:231 来源: 互联网
标签:data-binding wpf xaml c

我在wpf中玩数据绑定,遇到问题.这是我的代码:

MainWindow.xaml








MainWindow.xaml.cs

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyClass myClass = new MyClass();
myClass.A = new MySubClass();
myClass.B = new MySubClass();
stackpanel.DataContext = myClass;
}
}
MyClass.cs

class MyClass : INotifyPropertyChanged
{
private MySubClass a;
public MySubClass A
{
get { return a; }
set
{
a = value;
OnPropertyChanged(“A”);
OnPropertyChanged(“C”);
}
}

private MySubClass b;
public MySubClass B 
{
    get { return b; }
    set
    {
        b = value;
        OnPropertyChanged("B");
        OnPropertyChanged("C");
    }
}

public int C
{
    get { return A.Number + B.Number; }
}

public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string p)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(p));
    }
}        

}
MySubClass.cs

class MySubClass : INotifyPropertyChanged
{
private int number;
public int Number
{
get { return number; }
set
{
number = value;
OnPropertyChanged(“Number”);
}
}

public MySubClass()
{
    Number = 1;
}

public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string p)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(p));
    }
}     

}
现在,问题是在我运行应用程序后,绑定工作正常.另外,当我在文本框中更改值A.Number和B.Number时,它们也可以更新.但是,只有在应用启动时才更新MyClass.C中的变量C,之后才更新.我需要更改什么,以便当我更改A.Number或B.Number时C更新.谢谢.

解决方法:

在更新数据模型时,是否直接在MySubClass实例上更改Number或将新的子类分配给MyClass实例?即:

myClass.A.Number = 5; // will trigger OnPropertyChanged on MySubClass, but not on MyClass
不会触发A上的OnPropertyChanged(但当然会更新A.Number).
为此,您必须执行以下操作:

MySubClass v = new MySubClass()
v.Number = 5;
myClass.A = v; // will trigger OnPropertyChanged on MyClass
更新的答案.您可以执行此操作以捕获a和b中的任何属性更改.

public MyClass()
{
a.PropertyChanged += new PropertyChangedEventHandler(UpdateC);
b.PropertyChanged += new PropertyChangedEventHandler(UpdateC);
}

void UpdateC(object sender, PropertyChangedEventArgs e)
{
OnPropertyChanged(“C”);
}

标签:data-binding,wpf,xaml,c
来源: https://codeday.me/bug/20191102/1991948.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 图像隐写,如何在图像中隐藏二维码
  • SPL工业智能:发现时序数据的异常
  • 【Linux】进程概念(万字详解)—— 冯诺依曼体系结构 | 操作系统 | 进程
  • 网络编程套接字-----实现网络间通信
  • 机器学习:详细推导支持向量机SVM原理+Python实现
  • mysql socket文件丢失处理或者mysql.sock被删除
  • 欧拉计划详解第506题:钟摆序列
  • 《Python3 网络爬虫开发实战》:二、HTML消息结构
  • 调试接口小技巧-通过接口调试工具去下载上传文件
  • 【C指针详解】进阶篇
  • 惊奇发现业务移动端在往小程序化发展
  • 啸叫检测的方法:基于DSP的实现
  • java中比较两个map是否相同
  • C/C++编程工具及实用小软件推荐
  • [项目管理-15]:项目执行中的三大管理者:项目活动管理、职能部门管理、产品架构设计。
  • Angular6错误 Service: No provider for Renderer2
  • nginx 负载服务器优化
  • Nodejs和JavaWeb协助开发
  • SQLServer之索引简介
  • vue中实现单选
  • 设计模式走一遍---观察者模式
  • 算法---两个栈实现一个队列
  • 微信小程序开发问题汇总
  • 我的面试准备过程--容器(更新中)
  • 在Mac OS X上安装 Ruby运行环境
  • Mac 上flink的安装与启动
  • python最赚钱的4个方向,你最心动的是哪个?
  • # 透过事物看本质的能力怎么培养?
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (k8s中)docker netty OOM问题记录
  • (Ruby)Ubuntu12.04安装Rails环境
  • (ZT)出版业改革:该死的死,该生的生
  • (超详细)语音信号处理之特征提取
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)docker:Dockerfile构建容器运行jar包
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .NET DataGridView数据绑定说明
  • .Net 垃圾回收机制原理(二)
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net 应用中使用dot trace进行性能诊断
  • .Net 知识杂记
  • .NET/C# 使窗口永不获得焦点
  • .NET实现之(自动更新)
  • .net专家(张羿专栏)
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • ??在JSP中,java和JavaScript如何交互?
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [BZOJ1008][HNOI2008]越狱
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C++基础]-初识模板
  • [CQOI 2011]动态逆序对
  • [GN] DP学习笔记板子