2010-02-21 74 views
2

有沒有c#(silverlight)的任何功能,我可以在其中查看usercontrol的屬性,以便在沒有使用依賴項屬性的情況下進行任何更改?我想要一個不是靜態的。更改時附加事件到屬性

+0

我想你誤會依賴屬性。雖然包含對DependencyProperty對象的引用的字段是靜態的,但依賴屬性在概念上不是靜態的。一般來說,如果你從DependencyObject繼承,你可能想要使用依賴屬性來保持一致性(不得不記住綁定對某些屬性有效,而對象上的其他對象不好)。 – 2010-02-23 23:16:19

回答

2

有兩種標準機制,其中實現了「觀察」模式(正在描述)。一個是使用依賴屬性。

另一個是INotifyPropertyChanged接口的實現。

public partial class MyUserControl : UserControl, INotifyPropertyChanged 
{ 

    string _myProperty; 
    public string MyProperty 
    { 
    get { return _myProperty; } 
    set 
    { 
     _myProperty = value; 
     NotifyPropertyChanged("MyProperty"); 
    } 
    } 

    private void NotifyPropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs(name); 
    } 

    public event PropertyChangedEventHandler PropertyChanged 
} 

爲了觀看一個屬性,你需要附加到PropertyChanged事件。

MyUserControl control = new MyUserControl(); 
control += Control_PropertyChanged; 

...

void Control_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName == "MyProperty") 
    { 
     //Take appropriate action when MyProperty has changed. 
    } 
}