2014-10-29 51 views
-1

我有以下問題: 我有一個叫做File的班級,我希望這個班級在發生特殊事件時通知其他班級,但File不應該提及應該通知的班級。我認爲這與INotifyPropertyChanged-Interface解決的問題是一樣的。我唯一的解決方法是一個靜態列表,其中包含應該通知的類的實例以及此類的靜態方法,但我認爲這不是最明智的方法。 那麼,PropertyChanged使用哪個概念?PropertyChanged接口(事件系統)如何工作?

編輯

讓我們假設這應反應的類(通知)被調用FileManager,具有所謂的隱式FinishedReading事件和這個類僅實例化一次。 如何將FileManagerFinishedReading-事件綁定到類File的方法FinishReading(),如果File不應該提及FileManager的實例? 我已經嘗試通過FileManager s事件作爲參數,但它沒有工作。

[global::Microsoft.VisualStudio.TestTools.UnitTesting.TestClass] 
    public class FileManager 
    { 
     public delegate void MyDelegate(); 
     public event MyDelegate FinishedReading; 
    } 

    [global::Microsoft.VisualStudio.TestTools.UnitTesting.TestClass] 
    public class File 
    { 
     // Whats the exact Data-Type of the FinishedReading-Event? 
     public File(FileManager.MyDelegate eventInstance) 
     { 
      eventInstance += FinishReading; 
     } 

     public void FinishReading() 
     { 
      // 
     } 
    } 
+0

從這裏開始閱讀:[事件(C#編程指南)](http://msdn.microsoft.com/zh-cn/library/awbftdfh.aspx)。 – Clemens 2014-10-29 08:49:34

+0

@Clemens habe meine Frage editiert,wielöseich mein問題? 編輯我的問題,我該如何解決這個問題? – Feve123 2014-10-29 11:12:38

回答

0

在這種情況下,我會使用這些事件,而不是與一些靜態方法。 INotifyPropertyChanged是一種聽衆系統。 WPF系統從INotifyPropertyChanged檢查您的綁定班級,並在需要時調用方法PropertyChanged

首先解決

好了,在這種情況下,我會做FileManage單身,但你只有一個實例。在文件中你可以打電話FileManage.Singleton.FinishReading()或類似的東西。

public class FileManager 
{ 
    private static readonly FileManager singleton = new FileManager(); 

    public static FileManager Singleton 
    { 
     get { return FileManager.singleton; } 
    } 


    private FileManager() 
    { 

    } 

    public void FinishReading() 
    { 

    } 
} 

public class File 
{ 
    public void FinishReading() 
    { 
     // 
     FileManager.Singleton.FinishReading(); 
    } 
} 

解決方法二:

您可以使用文件管理器類的一個工廠File和委託設置爲FinishReading()。比你有一個很好的界面來創建文件,而不必關心傳遞正確的參數。

public class FileManager 
{ 
    public FileManager() 
    { 

    } 

    public File CreateFile() 
    { 
     File f = new File(this.FinishReading); 

     return f; 
    } 

    public void FinishReading() 
    { 

    } 
} 

public class File 
{ 
    public delegate void FinishReadingDelegate(); 
    private FinishReadingDelegate del; 

    public File(FinishReadingDelegate Del) 
    { 
     del = Del; 
    } 


    public void FinishReading() 
    { 
     // 
     del.Invoke(); 
    } 
} 
+0

我編輯了這個問題。我該如何解決它? – Feve123 2014-10-29 11:13:31

+0

@ Feve123我更新了我的文章 – BendEg 2014-10-29 12:00:13

+0

Danke dir! Ich verwende das Singleton-Muster,istfürmich zwar auch neu,dennoch「einfacher」als das Factory-Konzept。順便說一下,lernst du C#an der Uni? 英文: 謝謝。 – Feve123 2014-10-29 15:17:58