【问题标题】:Binding to a usercontrols dependencyproperties绑定到用户控件依赖属性
【发布时间】:2013-01-08 14:08:52
【问题描述】:

我有一个名为 FormattedTextBox 的 WPF UserControl 项目,它在同一解决方案中包含一个 TextBox 和一个 WPF 窗口项目。

我的用户控件有两个这样注册的依赖属性:

public static readonly DependencyProperty NumberProperty =  
    DependencyProperty.Register("Number", 
        typeof(double), 
        typeof(FormattedTextBox), 
        new FrameworkPropertyMetadata());  

public static readonly DependencyProperty NumberFormatStringProperty =
    DependencyProperty.Register("NumberFormatString", 
        typeof(string), 
        typeof(FormattedTextBox),
        new FrameworkPropertyMetadata());  

我在主窗口中创建了我的用户控件的实例。主窗口包含INotifyPropertyChanged 并有一个名为MyNumber 的属性。在主窗口的 XAML 中,我尝试像这样绑定到 MyNumber

Number="{Binding Path=MyNumber,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"   

绑定不起作用 - 我从未进入用户控件中 Number 属性的 get 或 set 操作。有人可以帮忙吗?

【问题讨论】:

  • 在调试模式下运行...查看输出窗口...查看任何绑定错误?

标签: wpf mvvm dependency-properties


【解决方案1】:

当在 XAML 中设置依赖属性时(或通过绑定或动画等),WPF 直接访问底层 DependencyObject 和 DependencyProperty,而不调用 CLR 包装器。见XAML Loading and Dependency Properties, 自定义依赖属性的含义。

为了获得有关Number 属性更改的通知,您必须注册PropertyChangedCallback

public static readonly DependencyProperty NumberProperty =  
    DependencyProperty.Register("Number", 
        typeof(double), 
        typeof(FormattedTextBox), 
        new FrameworkPropertyMetadata(NumberPropertyChanged));

private static void NumberPropertyChanged(
    DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
    var textBox = obj as FormattedTextBox;
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多