【问题标题】:WPF: Can't binding to Dependency Property in User ControlWPF:无法绑定到用户控件中的依赖属性
【发布时间】:2013-02-11 18:05:10
【问题描述】:

为什么我不能绑定到我的用户控件中的依赖属性? 我只将字符串“Test”视为默认值,但绑定不在测试应用程序中运行。如果我在文本块对象中的测试应用程序中执行相同的绑定,则它可以工作。所以问题一定出在具有依赖属性的 myItem 类中。

代码:

public partial class myItem : UserControl, INotifyPropertyChanged
{
    public static DependencyProperty HeaderProperty =
            DependencyProperty.Register("Header", typeof(String), typeof(myItem), new UIPropertyMetadata("Test"));

    public myItem()
    {
        InitializeComponent();
        DataContext = this;
    }

    public String Header
    {
        get
        {
            return (String)GetValue(HeaderProperty);
        }
        set
        {
            SetValue(HeaderProperty, value);
            OnPropertyChanged("Header");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

【问题讨论】:

  • 你在这里混合了所有内容,尝试使用 propdp 创建依赖属性并向我们展示你想绑定什么
  • 输出窗口是否有绑定异常?如果您使用依赖属性,您实际上也不需要提高 INotifyPropertyChanged,但我想您可能有自己的原因。
  • 请仔细阅读这篇文章:Custom Dependency Properties.

标签: wpf user-controls dependency-properties


【解决方案1】:

依赖属性已处理更改通知,因此您不必显式实现 INotifyPropertyChanged。 所以你可以从设置器中删除OnPropertyChanged("Header");

如果你想在这个属性的变化上调用一个函数,正确的方法是在 Dependency 属性中定义它:

 public static DependencyProperty HeaderProperty =
            DependencyProperty.Register("Header", typeof(String), typeof(myItem), new PropertyMetadata("Test", OnHeaderChanged));

    public String Header
        {
            get
            {
                return (String)GetValue(HeaderProperty);
            }
            set
            {
                SetValue(HeaderProperty, value);
            }
        }

    private void OnHeaderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){ //do something}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多