2010-01-23 109 views
2

我有一個現有的類有一個列表,我需要將此列表更改爲BindingList,但該類有一個屬性,該屬性返回此列表的ReadOnlyCollection。這個列表只能在這個類中修改,這一點很重要。現在我必須將這個列表更改爲一個綁定列表,這樣當列表發生變化時,我可以在另一個班級獲得通知。我知道爲了設置DataBindingSource.DataSource在另一個類中引用這個列表的唯一方法是提供一個返回這個BindingList的屬性,但是這會暴露列表並提升只讀能力。有沒有辦法在另一個類中設置DataBindingSource.DataSource,並防止列表暴露給其他類。下面是示例代碼如何返回只讀綁定列表

//Existing code 
public class MessageManager 
{ 
    List<Message> messageList = new List<Message>(); 

    public ReadOnlyCollection<Message> ReadonlyMessageList 
    { 
     get { return messageList.AsReadOnly(); } 
    } 

} 

//Want to change to 
public class MessageManager 
{ 
    BindingList<Message> messageList = new BindingList<Message>(); 

    public BindingList<Message> Messages 
    { 
     get { return messageList; } 
    } 

} 

//New class 
public class Browser 
{ 
    BindingSource source = new BindingSource(); 
    public Browser() 
    { 
     source.DataSource = Messages; 
     source.ListChanged += new System.ComponentModel.ListChangedEventHandler(source_ListChanged); 
    } 


    private int messageCount = 0; 
    void source_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e) 
    { 
     messageCount++; 
    } 
} 

MessageManager是一個現有的類。有沒有辦法綁定到BrowserList中的messageList而不暴露下劃線messageList?

回答