public override void OnApplyTemplate()
        {
            var selector = this.Template.Resources["propertytemplateSelector"] as DataTemplateSelector;

            Content ??= new ContentControl {
                ContentTemplateSelector = selector
            };

            interactiveList = this.GetTemplateChild("Main_InteractiveList") as InteractiveList;

            //this.SelectChanges<string>(nameof(Group)).Subscribe(a =>
            //{
            //    interactiveList.Group = a;
            //});

            var objects = SelectChanges <IEnumerable>(nameof(ItemsSource))
                          .Where(a => a != null)
                          .Select(its => its.MakeObservable())
                          .Switch();

            var(collectionViewModel, disposable) =
                (Group == null) ?
                InteractiveCollectionFactory.Build(
                    objects,
                    getkeyObservable: Observable.Return(new Func <object, object>(a => Guid.NewGuid())),
                    isCheckableObervable: Observable.Return(false),
                    filter: Observable.Return(new DefaultFilter()))
             : InteractiveCollectionFactory.BuildGroup(
                    objects,
                    getkeyObservable: Observable.Return(new Func <object, object>(a => Guid.NewGuid())),
                    filter: Observable.Return(new DefaultFilter()),
                    groupParameter: this.SelectChanges <string>(nameof(Group)));
            //isCheckableObervable: Observable.Return(false),

            interactiveList.InteractiveCollectionBase = collectionViewModel;

            collectionViewModel.Items.MakeObservable().Subscribe(a =>
            {
            });

            collectionViewModel.SelectSelected()
            .CombineLatest(
                SelectChanges <IValueConverter>(nameof(DataConverter)).StartWith(default(IValueConverter)),
                SelectChanges <string>(nameof(DataKey)).StartWith(default(string)), (a, b, c) => (a, b, c))
            .ObserveOnDispatcher()
            .Subscribe(a =>
            {
                var c = a.a;
                if (a.b != null)
                {
                    c = a.b.Convert(c, default, default, default);
        private IObservable <InteractiveCollectionBase <object> > Build(IObservable <string> key)
        {
            return(Observable.Return(InteractiveCollectionFactory.Build(

                                         elems: DataSubject.SelectMany(v => v.Cast <object>()),
                                         getkeyObservable: key.Select(_ => GetKeyFunc(_)),
                                         filter: FilterSubject,
                                         deletedObservable: DeletedSubject.WithLatestFrom(IsRemovableSubject.DistinctUntilChanged(), (d, r) => r ? d : null).Where(v => v != null),
                                         clearedObervable: ClearedSubject,
                                         deleteableObervable: IsRemovableSubject,
                                         isCheckableObervable: IsCheckableSubject,
                                         doubleClickToCheck: DoubleClickToCheckSubject
                                         ).collectionViewModel));
        }
        private IObservable <InteractiveCollectionBase <object> > BuildGroup(IObservable <string> key)
        {
            //var UI = new DispatcherScheduler(Application.Current.Dispatcher);

            return(Observable.Return(InteractiveCollectionFactory.BuildGroup(
                                         DataSubject.SelectMany(v => v.Cast <object>()),
                                         key.Select(_ => GetKeyFunc(_)),
                                         FilterSubject,
                                         DeletedSubject.WithLatestFrom(IsRemovableSubject.DistinctUntilChanged(), (d, r) => r ? d : null).Where(v => v != null),
                                         ClearedSubject,
                                         deleteableObervable: IsRemovableSubject,
                                         doubleClickToCheck: DoubleClickToCheckSubject,
                                         groupParameter: GroupSubject
                                         ).collectionBase));
        }
Example #4
0
        public override void OnApplyTemplate()
        {
            Content ??= new ItemsControl();

            interactiveList = this.GetTemplateChild("Main_InteractiveList") as InteractiveList;

            var objects = (this).SelectChanges <IEnumerable>(nameof(ItemsSource))
                          .Select(its => its.MakeObservable())
                          .Switch();

            var ic = InteractiveCollectionFactory.Build(objects, getkeyObservable: Observable.Return(new Func <object, object>(a => Guid.NewGuid())), filter: Observable.Return(new DefaultFilter()), isCheckableObervable: Observable.Return(true));

            //objects.Switch().Subscribe(ic => Objects = ic);

            interactiveList.InteractiveCollectionBase = ic.collectionViewModel;

            ic.collectionViewModel.Items.MakeObservable().Subscribe(a =>
            {
            });

            //.Merge(this.SelectLoads()
            ////.Select(a => Content ??= new JsonView()))
            //.DistinctUntilChanged(a => a?.GetType().Name));

            var xx = SelectChanges <string>(nameof(MasterDetailCheckView.Id))
                     .StartWith(Id)
                     .CombineLatest(objects, (id, b) => b.GetType().GetProperty(id))
                     .Select(prop => ic.collectionViewModel.SelectCheckedChanges().ToObservableChangeSet(c => prop.GetValue(c.obj)))
                     .Switch()
                     .Filter(a => a.isChecked)
                     .Transform(a => a.obj)
                     .ToCollection()
                     .CombineLatest(this.WhenAnyValue(c => c.Content)
                                    .Where(a => a != null), (collection, obj) => (collection, obj))
                     .Subscribe(ab =>
            {
                SetCollection(ab.obj, ab.collection);
            });
        }