我有一个具有List的现有类,我需要将此List更改为BindingList,但该类具有返回此列表的ReadOnlyCollection的属性。重要的是此列表只能在此类中修改。现在我必须将此List更改为BindingList,以便在列表更改时我可以在另一个类中收到通知。我知道为了设置DataBindingSource.DataSource以在另一个类中引用此列表的唯一方法是提供一个返回此BindingList的属性,但这将公开列表并提升readonly功能。有没有办法在另一个类中设置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是一个现有的类。有没有办法绑定到Browser类中的messageList而不暴露下划线messageList?
答案 0 :(得分:1)
据我了解您的问题,您只需要在列表更改时发出通知,而不是在通过INotifyPropertyChanged更改项目时。试试ObservableReadOnlyCollection。