Как вернуть BindingList только для чтения

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


person queandans    schedule 23.01.2010    source источник


Ответы (1)


Насколько я понимаю ваш вопрос, вам нужно уведомление только при изменении списка, а не при изменении его элемента через INotifyPropertyChanged. Попробуйте ObservableReadOnlyCollection.

http://msdn.microsoft.com/en-us/library/ms668620.aspx

person Francis Gagnon    schedule 27.02.2012