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

  • 相关阅读:
    JS中的this
    VS下遇到未能加载文件或程序集 错误
    观察者模式实现INotifyPropertyChanged
    看书不仔细的下场
    Android 解析XML
    杂想
    Android 对话框用法
    Android之AlertDialog.Builder详解
    Android:开机自启动并接收推送消息
    Clojure:通过ZeroMQ推送消息
  • 原文地址:https://www.cnblogs.com/luminji/p/2076330.html
Copyright © 2011-2022 走看看