当前位置: 代码迷 >> C# >> 问个有关 DataBinding 的有关问题,WinForm里的
  详细解决方案

问个有关 DataBinding 的有关问题,WinForm里的

热度:153   发布时间:2016-05-05 02:47:25.0
问个有关 DataBinding 的问题,WinForm里的
换了工作开始搞 WPF,从 WinForm 转过去很不习惯,尤其是其强大的数据绑定,绕来绕去的我已经晕了。
早上想做个小程序,因为 WPF 还不是很熟悉,所以打算用 WinForm来做。
窗口里有个信息输出用的 ListBox ,我想知道的是,如果给 ListBox 绑定了一个 List 格式的数据源后,当 List 内容变化时,ListBox 如何同步更新显示。不知道能不能通过类似 WPF 的 MVVM 来实现或者什么INotifyPropertyChanged之类的。。。
代码如下:

    internal class Log
    {
        private string msg;
        public string Msg
        {
            get { return msg; }
            set { msg = value; }
        }
    }


    internal class Worker
    {
        private List<Log> _log;
        public List<Log> Log
        {
            get
            {
                if (this._log == null)
                {
                    this._log = new List<Log>();
                }
                return this._log;
            }
        }

        public void DoWork()
        {
            this.Log.Clear();
            Timer timer = new Timer()
               {
                   Interval = 1000
               };
            int i = 0;
            timer.Tick += (o, e) =>
            {
                if (i < 20)
                {
                    this.Log.Add(new Log() { Msg = (i++).ToString() });
                }
                else
                {
                    timer.Stop();
                    timer.Dispose();
                }
            };
            timer.Start();
        }
    }


    public partial class Form1 : Form
    {
        private Worker worker;

        public Form1()
        {
            InitializeComponent();
            this.worker = new Worker();

            //this.logBox.DataSource = this.worker.Log;
            //this.logBox.DisplayMember = "Msg";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            worker.DoWork();
        }
    }

小白求教学


------解决思路----------------------
WPF/Silverlight控件关心的绑定数据源是否现实INotifyCollectionChanged接口,(INotifyCollectionChange接口中定义了CollectionChanged事件)。
winform的BindingSource实现了IBindingList接口,而IBindingList里有个ListChanged事件。貌似winform控件会自动订阅这个事件,然后当列表发生变化时自动更新自己的吧。
  相关解决方案