示例#1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SelectableCollectionSelector{T}"/> class.
 /// </summary>
 /// <param name="items">The source items.</param>
 public SelectableCollectionSelector(IReadOnlyObservableList <T> items) : base(items)
 {
     foreach (var selectableItem in Items)
     {
         SelectionChangedEventManager.AddListener(selectableItem, this);
     }
 }
示例#2
0
        public void SetSource([NotNull] IReadOnlyObservableList <TFrom> newSource)
        {
            if (newSource == null)
            {
                throw new ArgumentNullException(nameof(newSource));
            }

            using (_targetItems.EnterMassUpdate())
            {
                if (_sourceItems != null)
                {
                    _sourceItems.CollectionChanged -= SourceItemsOnCollectionChanged;
                    if (_sourceItems is IDisposable disposable)
                    {
                        disposable.Dispose();
                    }
                }

                _sourceItems = newSource;
                _sourceItems.CollectionChanged += SourceItemsOnCollectionChanged;

                _targetItems.Clear();
                _lookup.Clear();

                AddNewItems(newSource);
            }
        }
 public MainViewModel()
 {
     LiveLinqQueryResult = Source
         .ToLiveLinq()
         .Select(vm => vm.Name.Select(str => string.Join(string.Empty, str.Reverse())))
         .ToReadOnlyObservableList();
     AddCommand.Subscribe(_ => Add());
 }
 /// <summary>
 ///     Initializes a new instance of the <see cref="CollectionSelector{T}" /> class.
 /// </summary>
 /// <param name="items">The source items.</param>
 /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="items" /> is <strong>null</strong>.</exception>
 public CollectionSelector(IReadOnlyObservableList <T> items)
 {
     if (items == null)
     {
         throw new ArgumentNullException(nameof(items));
     }
     Items = items;
     CollectionChangedEventManager.AddListener(Items, this);
 }
示例#5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ConditionalSwitchableListSource{T}"/> class.
        /// </summary>
        /// <param name="condition">The condition.</param>
        /// <param name="positiveSource">The positive source.</param>
        /// <param name="negativeSource">The negative source.</param>
        public ConditionalSwitchableListSource(IObservable <bool> condition,
                                               IReadOnlyObservableList <T> positiveSource, IReadOnlyObservableList <T> negativeSource)
        {
            _condition      = condition ?? throw new ArgumentNullException(nameof(condition));
            _positiveSource = positiveSource;
            _negativeSource = negativeSource;

            _subscription = condition.Subscribe(this);
        }
示例#6
0
 private void _SubscribeChangedEvents(IReadOnlyObservableList <MappingMonitor.MappingModel> projModels)
 {
     foreach (var entry in projModels)
     {
         entry.PropertyChanged -= MappingModel_PropertyChanged;
         entry.PropertyChanged += MappingModel_PropertyChanged;
     }
     projModels.CollectionChanged -= MappingModelTables_CollectionChanged;
     projModels.CollectionChanged += MappingModelTables_CollectionChanged;
 }
示例#7
0
        public ProjectionManager(RootView rootView, ISubscribableRouter subscribableRouter)
        {
            _rootView = rootView;
            _views    = new MessagingTracker <IView>(subscribableRouter);

            _sceneRoots = new ObservableList <ISceneNodeComponent>();
            SceneRoots  = new ReadOnlyObservableList <ISceneNodeComponent>(_sceneRoots);

            subscribableRouter.Add <ICompositionMessage <ISceneNodeComponent> >(Interpret);
            subscribableRouter.Add <IDecompositionMessage <ISceneNodeComponent> >(Interpret);
        }
示例#8
0
 protected override string FormatValue(IReadOnlyObservableList <DataObjectViewModel> value)
 {
     if (value.Count == 0)
     {
         return(BaseObjectCollectionViewModelResources.NoItems);
     }
     if (value.Count == 1)
     {
         return(string.Format(BaseObjectCollectionViewModelResources.OneItem, value[0].Name));
     }
     return(string.Format(BaseObjectCollectionViewModelResources.MoreItems, value.Count, value[0].Name));
 }
示例#9
0
        public TrackingCollection(
            [CanBeNull] IReadOnlyObservableList <TFrom> sourceItems,
            [NotNull] Func <TFrom, TTo> createTargetItemFunc)
        {
            _sourceItems          = sourceItems;
            _createTargetItemFunc = createTargetItemFunc ?? throw new ArgumentNullException(nameof(createTargetItemFunc));
            _targetItemsWrapper   = new ReadOnlyObservableCollectionWrapper <TTo, TTo>(_targetItems);

            if (sourceItems != null)
            {
                SetSource(sourceItems);
            }
        }
示例#10
0
        public void SetSource(IReadOnlyObservableList <T> newInner)
        {
            if (_inner != null)
            {
                _inner.PropertyChanged   -= InnerOnPropertyChanged;
                _inner.CollectionChanged -= InnerCollectionChanged;
            }

            _inner = newInner;
            newInner.PropertyChanged   += InnerOnPropertyChanged;
            newInner.CollectionChanged += InnerCollectionChanged;

            CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
        }
示例#11
0
        protected override NotifyCollectionChangedEventArgs BuildCompositeEventArgs(IReadOnlyObservableList <T> sender, NotifyCollectionChangedEventArgs e)
        {
            int GetSenderStartIndex() => ObservableCollections.TakeWhile(x => x != sender).Sum(x => x.Count);
            int GetNewItemsIndex() => GetSenderStartIndex() + (e.NewStartingIndex >= 0 ? e.NewStartingIndex : throw new InvalidOperationException());
            int GetOldItemsIndex() => GetSenderStartIndex() + (e.OldStartingIndex >= 0 ? e.OldStartingIndex : throw new InvalidOperationException());

            switch (e.Action)
            {
            case NotifyCollectionChangedAction.Add:
            {
                return(CollectionChangedEventArgs.InsertRange(e.NewItems, GetNewItemsIndex()));
            }

            case NotifyCollectionChangedAction.Remove:
            {
                return(CollectionChangedEventArgs.RemoveRange(e.OldItems, GetOldItemsIndex()));
            }

            case NotifyCollectionChangedAction.Replace:
            {
                return(CollectionChangedEventArgs.ReplaceRange(e.OldItems, e.NewItems, GetOldItemsIndex()));
            }

            case NotifyCollectionChangedAction.Move:
            {
                return(CollectionChangedEventArgs.MoveRange(e.OldItems, GetOldItemsIndex(), GetNewItemsIndex()));
            }

            case NotifyCollectionChangedAction.Reset:
            {
                if (sender.Count == Count)
                {
                    return(CollectionChangedEventArgs.Clear());
                }

                return(CollectionChangedEventArgs.RemoveRange(sender.ToList(), GetSenderStartIndex()));
            }

            default:
                throw new NotSupportedException();
            }
        }
示例#12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CastingReadOnlyObservableList{TSource, TTarget}"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 public CastingReadOnlyObservableList(IReadOnlyObservableList <TSource> source) : base(source, nameof(Count), "Item[]")
 {
     _source = source;
 }
示例#13
0
 /// <summary>
 ///     Initializes a new instance of the <see cref="TransactionalReadOnyObservableList{T}" /> class.
 /// </summary>
 /// <param name="source">The source.</param>
 public TransactionalReadOnyObservableList(IReadOnlyObservableList <T> source) : base(source)
 {
 }
示例#14
0
 protected override void SetValueToModel(IReadOnlyObservableList <CompoundObjectViewModel> value)
 {
     throw new NotSupportedException();
 }
示例#15
0
 public MirroredBindableList(IReadOnlyObservableList <TSource> source, Func <TSource, TTarget> sourceToTarget, Func <TTarget, TSource> targetToSource)
     : this((IEnumerable <TSource>)source, sourceToTarget, targetToSource)
 {
     source.CollectionChanged += OnSourceCollectionChanged;
 }
示例#16
0
 public GuiThreadQueuedReadOnlyObservableList(IReadOnlyObservableList <T> list)
 {
     _list = list;
     _list.PropertyChanged   += (s, a) => GuiCallbackQueue.Enqueue(() => GuiPropertyChanged?.Invoke(s, a));
     _list.CollectionChanged += (s, a) => GuiCallbackQueue.Enqueue(() => GuiCollectionChanged?.Invoke(s, a));
 }