2010-01-23 80 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?

回答