public AsyncObservableCollection(IEnumerable <T> items, ISingleThreadedInvoker ui)
            : base(ui)
        {
            _ui                   = ui;
            _hashCheck            = new HashSet <T>(items);
            _addedInTransaction   = new ConcurrentQueue <T>();
            _removedInTransaction = new ConcurrentQueue <T>();
            _backingCollection    = ui.Invoke(() =>
            {
                var bc = new ObservableCollection <T>(_hashCheck);
                Count  = bc.Count;
                bc.CollectionChanged      += OnBackingCollectionChanged;
                INotifyPropertyChanged exp = bc;
                exp.PropertyChanged       += OnBackingCollectionPropertyChanged;

                return(bc);
            });
        }
 public AsyncObservableCollection(ISingleThreadedInvoker ui, params IEnumerable <T>[] itemses)
     : this(SelectFromMany(itemses), ui)
 {
 }
 public AsyncObservableCollection(ISingleThreadedInvoker ui)
     : this(Enumerable.Empty <T>(), ui)
 {
 }
 protected InvokableViewModel(ISingleThreadedInvoker invoker)
 {
     StaInvoker = invoker;
 }