zoukankan      html  css  js  c++  java
  • DependencyProperty使用中的3个场景,讨论PropertyChangedCallback

    1:项目结构图

    image

    2:控件SilverlightControl1

    前台:

    image

    后台:

        public partial class SilverlightControl1 : UserControl
        {
            public SilverlightControl1()
            {
                InitializeComponent();
            }
    
            public static readonly DependencyProperty StudentProperty = DependencyProperty.Register("Student", typeof(Student), typeof(SilverlightControl1), new PropertyMetadata(new PropertyChangedCallback(xxx)));
    
            public Student Student
            {
                get
                {
                    return (Student)GetValue(StudentProperty);
                }
                set
                {
                    SetValue(StudentProperty, value);
                    
                }
            }
    
            static void xxx(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                MessageBox.Show("sss");
            }
        }

    3:调用方

    前台:

    image

    后台:

        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
            }
    
            Student student1 = new Student() { StudentName = "hzh" + DateTime.Now.ToFileTime(), Age = 99 };
            Student student2 = new Student() { StudentName = "lmj" + DateTime.Now.ToFileTime(), Age = 99 };
            Student student3 = new Student() { StudentName = "lh" + DateTime.Now.ToFileTime(), Age = 99 };
    
            //初始化
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                //采用非绑定机制
                uc1.Student = student1;
                //采用非绑定机制,对DataContext赋值
                uc2.DataContext = student2;
                //采用绑定机制
                uc3.DataContext = student3;
            }
    
            //改Model值
            private void Button_Click1(object sender, RoutedEventArgs e)
            {
                student1.StudentName = "lmj" + DateTime.Now.ToString();
                student1.Age = 90;
                student2.StudentName = "hzh" + DateTime.Now.ToString();
                student2.Age = 90;
                student3.StudentName = "hzh" + DateTime.Now.ToString();
                student3.Age = 90;
            }
    
            //更换Model
            private void Button_Click_1(object sender, RoutedEventArgs e)
            {
                student1 = new Student() { StudentName = "hzh" + DateTime.Now.ToFileTime(), Age = 99 };
                student2 = new Student() { StudentName = "lmj" + DateTime.Now.ToFileTime(), Age = 99 };
                student3 = new Student() { StudentName = "lh" + DateTime.Now.ToFileTime(), Age = 99 };
            }
        }

    4:结论

    无论是第一种方式,还是第三种方式,都能触发PropertyChangedCallback,而如果调用采用第二种方式,则不会触发PropertyChangedCallback。

    源码:SilverlightApplication320110609.rar

  • 相关阅读:
    How do you Design a Circular FIFO Buffer (Queue) in C?

    搞懂分布式技术5:Zookeeper的配置与集群管理实战
    Spring boot 启动提示数据源错误
    IntelliJ IDEA 如何配置数据源
    Windows 10 中你可能用得最多的快捷键
    JUnit 5 测试问题 throws java.lang.Exception’ must be static unless the test class is annotated with @TestInstance(Lifecycle.PER_CLASS)
    Intellij IDEA 如何自动生成 serialVersionUID
    Docsify 初始化文件夹
    Docsify 安装
  • 原文地址:https://www.cnblogs.com/luminji/p/2076330.html
Copyright © 2011-2022 走看看