У меня есть существующий класс со списком, и мне нужно изменить этот список на BindingList, но у класса есть свойство, которое возвращает ReadOnlyCollection этого списка. Важно, что этот список можно изменить только внутри этого класса. Теперь мне нужно изменить этот список на BindingList, чтобы я мог получать уведомления в другом классе, когда список изменился. Единственный известный мне способ установить 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 — это существующий класс. Есть ли способ привязаться к списку сообщений в классе браузера, не раскрывая подчеркнутый список сообщений?