private void SlaveList_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Add:
                foreach (var item in e.NewItems)
                {
                    MasterList.Add((T)item);
                }

                break;

            case NotifyCollectionChangedAction.Move:
                // We don't care if an item is moved.
                break;

            case NotifyCollectionChangedAction.Remove:
                foreach (var item in e.NewItems)
                {
                    MasterList.Remove((T)item);
                }

                break;

            case NotifyCollectionChangedAction.Replace:
                T   oldItem = (T)e.OldItems[0];
                T   newItem = (T)e.NewItems[0];
                int index   = MasterList.IndexOf(oldItem);

                MasterList[index] = newItem;

                break;

            case NotifyCollectionChangedAction.Reset:
                foreach (var item in e.NewItems)
                {
                    MasterList.Remove((T)item);
                }

                break;

            default:
                break;
            }
        }