• 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));
        }
    }        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    }
    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));
        }
    }     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    }
    现在,问题是在我运行应用程序后,绑定工作正常.另外,当我在文本框中更改值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

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

  • 相关阅读:
    raylib部分源代码功能解读
    自定义MVC原理
    SpringBoot -集成Druid
    国内外开源数据可视化工具对比:DataEase相较于MetaBase有何优势
    Redis事务+watch+RDB+AOF+发布订阅+主从复制+哨兵模式+缓存穿透和雪崩及解决方案+使用watch实现秒杀相关
    springboot的商品设计热销排行实现
    Tomcat 服务详解
    抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
    Static关键字
    【李宏毅】深度学习-CNN(影像辨识为例)
  • 原文地址:https://blog.csdn.net/weixin_41883890/article/details/126720469