public IObservable <T> GetSelectedItem(IObservable <bool> ischecked)
        {
            var ca = this.SelectSelected();

            var cb = (this as InteractiveCollectionViewModel <T, IConvertible>).ChildSubject.Where(_ => _.Value.Interaction == Interaction.Select && (int)_.Value.Value > 0).Select(_ => _.Key);

            var xx = ca.Merge(cb)
                     .CombineLatest(ischecked, (a, b) => new { a, b }).Where(_ => Checked.Contains(_.a) || _.b == false);

            return(xx.Select(_ => _.a));
        }
        private void Init()
        {
            Interactions.Where(_ => _.Value.Interaction == Interaction.Check && (bool?)_.Value.Value == true).Subscribe(_ =>
            {
                Checked.Add(_.Key);
                if (Unchecked.Contains(_.Key))
                {
                    Unchecked.Remove(_.Key);
                }
            });

            ChildSubject.Where(_ => _.Value.Interaction == Interaction.Check && (bool?)_.Value.Value == true).Subscribe(_ =>
            {
                Checked.Add(_.Key);
                if (Unchecked.Contains(_.Key))
                {
                    Unchecked.Remove(_.Key);
                }
            });

            Interactions.Where(_ => _.Value.Interaction == Interaction.Check && !((bool?)_.Value.Value == true)).Subscribe(_ =>
            {
                Unchecked.Add(_.Key);
                if (Checked.Contains(_.Key))
                {
                    Checked.Remove(_.Key);
                }
            });

            ChildSubject.Where(_ => _.Value.Interaction == Interaction.Check && !((bool?)_.Value.Value == true)).Subscribe(_ =>
            {
                Unchecked.Add(_.Key);
                if (Checked.Contains(_.Key))
                {
                    Checked.Remove(_.Key);
                }
            });
        }
        public IObservable <List <T> > SelectCheckedChildItems(IObservable <bool> ischecked, string childrenpath)
        {
            var x = GetSelectedItem(ischecked);

            return(x.Select(_ => ReflectionHelper.RecursivePropValues(_, childrenpath).Cast <T>().Where(a => Checked.Contains(a)).ToList()));
        }