分享

DependencyProperty使用中的3个场景,讨论PropertyChangedC...

 xyjackxjw 2013-05-26

DependencyProperty使用中的3个场景,讨论PropertyChangedCallback

2011-06-09 13:53 by Luminji, 587 阅读, 1评论, 收藏, 编辑

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多