2013-02-26 164 views
0

为什么我无法绑定到我的UserControl中的依赖属性? 我只看到字符串“测试”作为默认值,但绑定不会在测试应用程序中运行。如果我在测试应用程序中的文本块对象中执行相同的绑定而不起作用。所以问题必须在具有dependencyproperty的myItem类中。WPF:无法绑定到用户控件中的依赖属性

代码:

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)); 
     } 
    } 
} 
+0

你混这里的一切,尝试使用propdp创建依赖属性,并告诉我们你想绑定什么 – makc 2013-02-26 10:34:51

+0

输出窗口中是否存在任何绑定异常?如果您使用依赖项属性,您也不需要提出INotifyPropertyChanged,但我想您可能有自己的理由。 – Andy 2013-02-26 10:42:56

+0

请仔细阅读这个artice:[自定义依赖属性](http://msdn.microsoft.com/en-us/library/ms753358.aspx)。 – Clemens 2013-02-26 10:48:49

回答

0

依赖属性已经处理了变化的通知,所以你没有显式地去执行INotifyPropertyChanged。 所以,你可以如果你想叫上这个属性的正确方法是在依赖属性来定义它的变化的函数从模子

删除OnPropertyChanged("Header");

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}