1

我有DataGridView一个自定义列表。我使用以下方法绑定它:

datagridview.DataSource = MyList;

问题是每当我从线程向列表中添加新行时,它都不会在 DataGridView 中显示新行。有没有一种方法可以简单地覆盖OnNewData事件类型DoRefresh()并且可能不会丢失滚动位置?

我正在使用的同步列表:

   public class SyncList<T> : System.ComponentModel.BindingList<T>
    {
        private System.ComponentModel.ISynchronizeInvoke _SyncObject;
        private System.Action<System.ComponentModel.ListChangedEventArgs> _FireEventAction;

        public SyncList()
            : this(null)
        {
        }

        public SyncList(System.ComponentModel.ISynchronizeInvoke syncObject)
        {

            _SyncObject = syncObject;
            _FireEventAction = FireEvent;
        }

        protected override void OnListChanged(System.ComponentModel.ListChangedEventArgs args)
        {
            if (_SyncObject == null)
            {
                FireEvent(args);
            }
            else
            {
                _SyncObject.Invoke(_FireEventAction, new object[] { args });
            }
        }
4

1 回答 1

0

您的列表需要实现 INotifyPropertyChanged 以使绑定控件的自动更新工作。如果这样做,则需要在从列表中添加或删除项目时引发 PropertyChanged 事件。

或者,只需使用已经正确实现此接口的 BindingList 或 ObservableCollection。

绑定列表:http: //msdn.microsoft.com/en-us/library/ms132679.aspx

可观察的集合:http: //msdn.microsoft.com/en-us/library/ms668604.aspx

于 2013-10-17T16:05:43.280 回答