zoukankan      html  css  js  c++  java
  • [WPF源码分析]ContentControl依赖项属性的双向绑定,two-way binding view's DependencyProperty and ViewModel's variable

    问题:自定义控件的依赖项属性和VIewModel中的变量不能双向绑定

    解决思路:对比.net源码 PresentationFramework  /   System.Windows.Controls

    原因:定义依赖项属性时没有设置OnChanged方法

    解决方法:初始化时绑定Changed方法

    .net 源码如下:

    /// <summary>
            ///     The DependencyProperty for the Content property.
            ///     Flags:              None
            ///     Default Value:      null
            /// </summary>
            [CommonDependencyProperty]
            public static readonly DependencyProperty ContentProperty =
                    DependencyProperty.Register(
                            "Content",
                            typeof(object),
                            typeof(ContentControl),
                            new FrameworkPropertyMetadata(
                                    (object)null,
                                    new PropertyChangedCallback(OnContentChanged)));
     
            /// <summary>
            ///     Content is the data used to generate the child elements of this control.
            /// </summary>
            [Bindable(true), CustomCategory("Content")]
            public object Content
            {
                get { return GetValue(ContentProperty); }
                set { SetValue(ContentProperty, value); }
            }
     
            /// <summary>
            ///     Called when ContentProperty is invalidated on "d."
            /// </summary>
            private static void OnContentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
            {
                // 根据需要实现自己的方法 
                ContentControl ctrl = (ContentControl) d;
                ctrl.SetValue(HasContentPropertyKey, (e.NewValue != null) ? BooleanBoxes.TrueBox : BooleanBoxes.FalseBox);
     
                ctrl.OnContentChanged(e.OldValue, e.NewValue);
            }
     
  • 相关阅读:
    AGC 015 E
    CF 1041 F. Ray in the tube
    AGC 005 D
    CF 348 D. Turtles
    2069: [POI2004]ZAW
    AGC 007 D
    zhengruioi 470 区间
    2653: middle
    Django 源码安装及使用
    Django MTV模型思想
  • 原文地址:https://www.cnblogs.com/bincoding/p/8342791.html
Copyright © 2011-2022 走看看