2013-01-24 33 views
1

如果我有一個成員,構造函數和方法,像這樣在類調用一個方法時注入對象的屬性改變

//The injected object exposes a public property of type bool which will raise 
//a NotifyPropertyChangedEvent 
IInjectedObject _injectedObject; 

public someClass(IInjectedObject injectedObject) 
{ 
    _injectedObject = injectedObject; 
} 

public void DoSomething() 
{ 

} 

有沒有一種方法調用的方法在我上課的時候屬性上注入的對象改變了?

+0

你應該暴露在被注入的對象一個'Change'事件,並啓動它只要屬性發生變化。據我所知,沒有辦法自動完成。 – Oliver

+1

你可以讓injectObject引發一個事件,你的someClass可以用subsribe來引用。另一種方式是通過實現[INotifyPropertyChanged](http://msdn.microsoft.com/en-us/library/System.ComponentModel.INotifyPropertyChanged.aspx) – ryadavilli

+0

本文來自MSDN將幫助你,它解釋瞭如何實現[ **屬性更改通知**](http://msdn.microsoft.com/zh-cn/library/ms743695.aspx)。希望這可以幫助。 – Abbas

回答

1

您聲明您的接口繼承自INotifyPropertyChanged,因此可合理預期通過「PropertyChanged」事件通知監聽器屬性更改。假設是這樣的:

public interface IInjectedObject : INotifyPropertyChanged 
{ 
    bool MyImportantProperty { get; } 
} 

那麼,你的依賴對象必須監聽INotifyPropertyChanged.PropertyChanged事件:

public class MyDependantClass 
{ 
    public MyDependantClass(IInjectedObject injectedObject) 
    { 
     MyInjectedObject = injectedObject; 
    } 

    // We wrap the private field in a protected property, 
    // to capture the event subscriptions 
    private IInjectedObject _myInjectedObject; 
    protected IInjectedObject MyInjectedObject 
    { 
     get { return _myInjectedObject; } 
     set 
     { 
      // unsubscribe from the old property's event 
      if(_myInjectedObject!= null) 
       _myInjectedObject.PropertyChanged -= OnPropertyChanged; 

      _myInjectedObject= value; 

      // subscribe to the new property's event 
      if(_myInjectedObject!= null) 
       _myInjectedObject.PropertyChanged += OnPropertyChanged; 
     } 
    } 

    private void OnPropertyChanged(object sender, PropertyChangedEventArgs args) 
    { 
     if(args.PropertyName == "MyImportantProperty") 
     { 
      //react to the changed property here! 
     } 
    } 
} 
+0

我會嘗試這個答案並回復給你。注入的對象實現INotifyPropertyChanged,我感興趣的屬性引發該事件。這將如何改變你的例子? –

+1

除非您訂閱「INotifyPropertyChanged.PropertyChanged」事件,否則該示例將保持非常相同。事件處理程序會期望「PropertyChangedEventArgs」而不是「EventArgs」。 – BTownTKD

+0

我已經編輯了上述答案以迴應您的更新問題。 – BTownTKD

相關問題