/// <summary>
        /// 转为排序的BindingCollection;
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <param name="source"></param>
        /// <returns></returns>
        public static ExtBindingList <TSource> ToBindingList <TSource>(this IEnumerable <TSource> source)
        {
            ExtBindingList <TSource> tResult = new ExtBindingList <TSource>();

            foreach (var temp in source)
            {
                tResult.Add(temp);
            }
            return(tResult);
        }
 private void InitViolinData()
 {
     violinStorage = (IViolinStorage)daoDll.CreateInstance(
         "Michalski.Models.ViolinStorage", false, BindingFlags.ExactBinding, null, new object[] { dburi }, null, null
         );
     _violins = new ExtBindingList <IViolinModel>();
     foreach (var v in violinStorage.ReadAll())
     {
         _violins.Add(v);
     }
     Violins.ListChanged  += new ListChangedEventHandler(ViolinsChangedHandler);
     Violins.AddingNew    += (sender, e) => e.NewObject = violinStorage.CreateNewItem();
     Violins.BeforeChange += BeforeViolinsChangedHandler;
 }
        private void InitMakersData()
        {
            makerStorage = (IMakerStorage)daoDll.CreateInstance(
                "Michalski.Models.MakerStorage", false, BindingFlags.ExactBinding, null, new object[] { dburi }, null, null
                );

            _makers = new ExtBindingList <IMakerModel>();
            foreach (var m in makerStorage.ReadAll())
            {
                _makers.Add(m);
            }
            Makers.ListChanged  += new ListChangedEventHandler(MakersChangedHandler);
            Makers.AddingNew    += (sender, e) => e.NewObject = makerStorage.CreateNewItem();
            Makers.BeforeChange += BeforeMakersChangeHandler;
        }
        private void MakerFilter_TextChanged(object sender, TextChangedEventArgs e)
        {
            var filter = (sender as TextBox).Text;

            if (filter.Length > 0)
            {
                IEnumerable <IMakerModel> filteredDataEnumerable = from maker in mainVM.Makers where maker.name.StartsWith(filter) select maker;
                var filteredData = new ExtBindingList <IMakerModel>();
                foreach (var item in filteredDataEnumerable)
                {
                    filteredData.Add(item);
                }
                MakersDataGrid.DataContext = filteredData;
            }
            else
            {
                MakersDataGrid.DataContext = mainVM.Makers;
            }
        }
        private void ViolinFilter_TextChanged(object sender, TextChangedEventArgs e)
        {
            var filter = (sender as TextBox).Text;

            if (filter.Length > 0)
            {
                IEnumerable <IViolinModel> filteredDataEnumerable = from violin in mainVM.Violins where violin.maker.StartsWith(filter) select violin;
                var filteredData = new ExtBindingList <IViolinModel>();
                foreach (var item in filteredDataEnumerable)
                {
                    filteredData.Add(item);
                }
                ViolinsDataGrid.DataContext = filteredData;
            }
            else
            {
                ViolinsDataGrid.DataContext = mainVM.Violins;
            }
        }
        private void CreateBoxes()
        {
            //Create output boxes
            if (_NrOfOutputLists > _outputboxes.Count)
            {
                //_outputboxes.Reverse();
                for (int i = _outputboxes.Count; i < _NrOfOutputLists; i++)
                {
                    extendedListbox <Ploeg> _out = new extendedListbox <Ploeg>(new ExtBindingList <Ploeg>())
                    {
                        Dock      = DockStyle.Top,
                        Name      = _BindingSourceList.Name + "_Reeks_" + (i + 1).ToString(),
                        AllowDrop = true,
                    };
                    _outputboxes.Add(_out);
                    _out.ItemAdded += ItemAdded;
                }
            }
            //removing a box - set back the items to the input box and list
            else if (_NrOfOutputLists < _outputboxes.Count)
            {
                //_outputboxes.Reverse();
                int AantalTeVerwijderen = _outputboxes.Count - _NrOfOutputLists;

                for (int i = 0; i < AantalTeVerwijderen; i++)
                {
                    extendedListbox <Ploeg> removebox = _outputboxes.Last();
                    foreach (Ploeg item in removebox.Items)
                    {
                        _inputlist.Add(item);
                    }
                    splitContainer1.Panel2.Controls.Remove(removebox);
                    splitContainer1.Panel2.Refresh();
                    _outputboxes.Remove(removebox);
                    removebox.Dispose();
                    removebox = null;
                }
            }

            //remove all box controls and labels
            splitContainer1.Panel2.Controls.Clear();
            //fill up the boxes
            _outputboxes.Reverse();
            foreach (extendedListbox <Ploeg> box in _outputboxes)
            {
                //add items in outputlist and clean input list
                foreach (Ploeg pl in _inputlist)
                {
                    if (pl.Reeksnaam == box.Name)
                    {
                        box.Items.Add(pl);
                    }
                }
                //clean the input
                foreach (Ploeg pl in box.Items)
                {
                    _inputlist.Remove(pl);
                }
                splitContainer1.Panel2.Controls.Add(box);
                splitContainer1.Panel2.Controls.Add(new Label()
                {
                    Text = box.Name, Dock = DockStyle.Top
                });
            }



            splitContainer1.Panel2.Refresh();

            ///input as last step becuase depending on items already in an output list, the input list gets filtered
            splitContainer1.Panel1.Controls.Clear();
            _inputbox = new extendedListbox <Ploeg>(_inputlist);
            //naam van de reeks
            _inputbox.Name       = _BindingSourceList.Name;
            _inputbox.ItemAdded += ItemAdded;
            _inputbox.AutoSize   = true;
            _inputbox.Dock       = DockStyle.Top;
            Label _inputlabel = new Label()
            {
                Text = _inputbox.Name, Dock = DockStyle.Top
            };

            splitContainer1.Panel1.Controls.Add(_inputbox);
            splitContainer1.Panel1.Controls.Add(_inputlabel);



            _outputboxes.Reverse();
        }