2

List を持つ既存のクラスがあり、この List を BindingList に変更する必要がありますが、クラスにはこのリストの ReadOnlyCollection を返すプロパティがあります。このリストはこのクラス内でのみ変更できることが重要です。ここで、この List を 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 は既存のクラスです。下線付きのmessageListを公開せずにBrowserクラスのmessageListにバインドする方法はありますか?

4

1 に答える 1

1

あなたの質問を理解しているように、リストが変更されたときにのみ通知が必要であり、INotifyPropertyChanged を介して項目が変更されたときではありません。ObservableReadOnlyCollection を試してみてください。

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

于 2012-02-27T16:44:30.917 に答える