示例#1
0
        public HeightViewModel(IObservable <int> SourceSize, double ItemHeight = 25)
        {
            this.ItemHeight = ItemHeight;

            SourceSize
            .Select(c => c * ItemHeight)
            .ToProperty(this, x => x.ListHeight, out _listHeight)
            .DisposeWith(_cleanup);

            PagingRequests = this.WhenAnyValue(x => x.ListOffset,
                                               x => x.ViewportHeight,
                                               (offset, height) => new { offset, height })
                             .Select(x => new VirtualRequest(IndexFromOffset(x.offset), Count(x.offset, x.height)))
                             .DistinctUntilChanged()
                             .Do(rq => _lastRequest = rq);

            this.WhenAnyValue(x => x.ListHeight,
                              x => x.ViewportHeight,
                              (l, v) => Math.Max(0, l - v))
            .ToProperty(this, x => x.ScrollableMaximum, out _scrollableMaximum);

            this.WhenAnyValue(x => x.ItemHeight)
            .Select(h => h * 3)
            .ToProperty(this, x => x.SmallChange, out _smallChange);
        }
示例#2
0
        public IObservable <IVirtualChangeSet <T> > Run()
        {
            return(Observable.Create <IVirtualChangeSet <T> >(
                       observer =>
            {
                var locker = new object();
                var all = new List <T>();
                var virtualised = new ChangeAwareList <T>();

                IVirtualRequest parameters = new VirtualRequest(0, 25);

                var requestStream = _requests.Synchronize(locker).Select(
                    request =>
                {
                    parameters = request;
                    return CheckParamsAndVirtualise(all, virtualised, request);
                });

                var dataChanged = _source.Synchronize(locker).Select(changes => Virtualise(all, virtualised, parameters, changes));

                // TODO: Remove this shared state stuff ie. _parameters
                return requestStream.Merge(dataChanged).Where(changes => changes is not null && changes.Count != 0)
                .Select(x => x !)
                .Select(changes => new VirtualChangeSet <T>(changes, new VirtualResponse(virtualised.Count, parameters.StartIndex, all.Count))).SubscribeSafe(observer);
            }));
        }
示例#3
0
 public Virtualiser(VirtualRequest request = null)
 {
     _parameters = request ?? new VirtualRequest();
 }
        public void RunVirtualizationInAppDomain(SerializableDelegate <Action <VirtualRequest> > script)
        {
            var virtualRequest = new VirtualRequest();

            script.Delegate(virtualRequest);
        }