【问题标题】:How to return a Readonly BindingList如何返回只读绑定列表
【发布时间】:2010-01-23 06:06:59
【问题描述】:

我有一个现有的类,它有一个 List,我需要将此 List 更改为 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 是一个现有的类。有没有办法绑定到Browser类中的messageList而不暴露下划线messageList?

【问题讨论】:

    标签: bindinglist


    【解决方案1】:

    据我了解您的问题,您只需要在列表更改时发出通知,而不是在通过 INotifyPropertyChanged 更改项目时发出通知。试试 ObservableReadOnlyCollection。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多