2013-05-05 60 views
1

我在Form1中有一個TreeView。我有一個名爲「User」的類,我的意圖是修改TreeView。是否有可能使TreeView成爲全局的,並可以從我的User類訪問?可能使TreeView全局?

+3

這是一個非常糟糕的設計。您的課程不應與用戶界面耦合。 – SLaks 2013-05-05 19:53:15

+0

隨着我的繼續,這變得越來越明顯。我一直在試圖將它們拼湊在一起。我將不得不重新評估我的方法。謝謝。 – GoodBoyNYC 2013-05-05 20:00:31

+0

使用User類的委託給Form1表單。 – Max 2013-05-06 14:24:03

回答

2

一般而言,您的用戶界面應該是您所有「業務邏輯」其餘部分的頂層。

例如,您可能有一些UserManager類,該類顯示集合IEnumerable<User>,從中可以填充樹。 UI上的事件導致調用業務邏輯。

當業務邏輯中的事情需要更新UI時,他們應該公開爲events。事件本質上是.NET中的智能「回調函數」。 UI具有註冊這些事件的事件處理程序,並在業務層指示更改時相應地自行更新。

class User { } 
class UserManager { 
    public IEnumerable<User> Users { get { ... } } 

    public event UserLoggedInEventHandler UserLoggedIn; 

} 


class UI { 
    private UserManager m_usrMgr; 

    public UI() { 
     m_usrMgr = UserManager.GetSingletonInstance(); 
     m_usrMgr.UserLoggedIn += UserLoggedInHandler; 
    } 

    private void AddUserButtonClicked(...) { 
     m_userMgr.AddUser(username, ...); 
    } 

    private void UserLoggedInHandler(...) { 
     MessageBox.Show("User x logged in"); 
    } 
} 

使用事件有助於保持類的分離。通過精心設計的系統,您可以將整個系統移至不同的用戶界面,而無需觸及業務邏輯;只有調用它的代碼,並監聽來自它的事件。