Beispiel #1
0
        public SingleSelectionDescriptorBuilderBase(
            IVMDescriptor itemDescriptor,
            Func <TSourceObject, TItemSource, bool> isActiveFilter
            )
        {
            WithProperties((d, b) => {
                var v = b.GetPropertyBuilder();

                d.SelectedItem = v.VM.DelegatesTo(
                    (vm) => vm.GetSelectedItem(),
                    (vm, val) => vm.SetSelectedItem(val)
                    );

                d.AllItems = v
                             .Collection
                             .PopulatedWith(vm => {
                    IEnumerable <TItemSource> selectableItems = SelectionHelpers
                                                                .GetSelectableSourceItems <TSourceObject, TItemSource>(vm);

                    return(selectableItems.Select(x => vm.GetItemVM(x)));
                })
                             .With(itemDescriptor);
            });

            WithViewModelBehaviors(b => {
                b.OverrideUpdateFromSourceProperties(
                    x => x.AllSourceItems,
                    x => x.SelectedSourceItem,
                    x => x.AllItems,
                    x => x.SelectedItem
                    );
                b.OverrideUpdateSourceProperties(
                    x => x.SelectedSourceItem
                    );

                b.AppendBehavior(
                    new SelectionItemViewModelCacheBehavior <TItemSource, TItemVM>(itemDescriptor)
                    );

                b.PrependBehavior(new ItemProviderBehavior <TSourceObject, TItemSource>()
                {
                    IsActiveFilter = isActiveFilter
                });
            });

            WithBehaviors(b => {
                b.Property(x => x.AllSourceItems).IsCached();

                b.Property(x => x.SelectedItem).PrependBehavior(new SelectedItemRefreshBehavior <TItemVM>());

                // TODO: Make this configurable.
                b.Property(x => x.SelectedSourceItem).RequiresLoadedProperty(x => x.AllSourceItems);
            });

            WithValidators(b => {
                b.EnableParentValidation(x => x.SelectedItem);
            });
        }
        public MultiSelectionDescriptorBuilderBase(
            IVMDescriptor itemDescriptor,
            Func <TSourceObject, TItemSource, bool> isActiveFilter
            )
        {
            WithProperties((d, b) => {
                var v = b.GetPropertyBuilder();

                d.SelectedItems = v
                                  .Collection
                                  .Wraps(x => x.SelectedSourceItems)
                                  .With <TItemVM>(itemDescriptor);

                d.AllItems = v
                             .Collection
                             .PopulatedWith(vm => {
                    IEnumerable <TItemSource> selectableItems = SelectionHelpers
                                                                .GetSelectableSourceItems <TSourceObject, TItemSource>(vm);

                    return(selectableItems.Select(x => vm.GetItemVM(x)));
                })
                             .With(itemDescriptor);
            });

            WithViewModelBehaviors(b => {
                b.OverrideUpdateFromSourceProperties(
                    x => x.AllSourceItems,
                    x => x.SelectedSourceItems,
                    x => x.AllItems,
                    x => x.SelectedItems
                    );
                b.OverrideUpdateSourceProperties(
                    x => x.SelectedSourceItems
                    );

                b.AppendBehavior(
                    new SelectionItemViewModelCacheBehavior <TItemSource, TItemVM>(itemDescriptor)
                    );

                b.AppendBehavior(new ItemProviderBehavior <TSourceObject, TItemSource>()
                {
                    IsActiveFilter = isActiveFilter
                });
            });

            WithBehaviors(b => {
                b.Property(x => x.SelectedItems).Enable(
                    PropertyBehaviorKeys.ValueAccessor,
                    new SelectedItemsAccessorBehavior <TVM, TItemVM, TItemSource>()
                    );

                // This behavior allows a bound comobox to assign a new list to the 'SelectedItems'
                // property every time the selection changes.
                b.Property(x => x.SelectedItems).Enable(
                    PropertyBehaviorKeys.DisplayValueAccessor,
                    new SettableListDisplayValueBehavior <TItemVM>()
                    );

                b.Property(x => x.SelectedItems).AddChangeHandler((vm, args) => {
                    vm.RaisePropertyChangedForSelectedItems(); // HACK!
                });

                b.Property(x => x.AllSourceItems).IsCached();
                b.Property(x => x.SelectedItems).SupportsDisplayValueConversion();

                b.Property(x => x.SelectedItems).PrependBehavior(new SelectedItemsRefreshBehavior <TItemVM>());

                // TODO: Make this configurable.
                b.Property(x => x.SelectedSourceItems).RequiresLoadedProperty(x => x.AllSourceItems);
            });

            WithValidators(b => {
                b.EnableParentValidation(x => x.SelectedItems);
                b.EnableParentViewModelValidation();
            });
        }