您的位置:首页 > 运维架构

[WPF源码分析]ContentControl依赖项属性的双向绑定,two-way binding view's DependencyProperty and ViewModel's variable

2018-01-24 17:40 591 查看
问题:自定义控件的依赖项属性和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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: