public ICompositeItemCommandBindingBuilder <TSourceItem> WithCommandParameter <TCommandParameterTargetItem, TCommandParameterTargetItemValue>(
            TCommandParameterTargetItem targetItem,
            Expression <Func <TCommandParameterTargetItem, TCommandParameterTargetItemValue> > targetItemValue,
            ItemReferenceType referenceType)
            where TCommandParameterTargetItem : class
        {
            if (targetItem == null)
            {
                throw new ArgumentNullException(nameof(targetItem));
            }
            if (targetItemValue == null)
            {
                throw new ArgumentNullException(nameof(targetItemValue));
            }

            var targetItemReference               = new ItemReference <TCommandParameterTargetItem>(targetItem, referenceType);
            var targetItemValueAccessor           = new ItemValueAccessor <TCommandParameterTargetItem, TCommandParameterTargetItemValue>(targetItemValue);
            var targetItemCommandParameterBinding = new TargetItemPropertyBinding <TCommandParameterTargetItem, TCommandParameterTargetItemValue>(
                targetItemReference,
                targetItemValueAccessor);

            var targetItemCommandBinding = new TargetItemCommandBinding <TTargetItem, TTargetItemValue, TCommandParameterTargetItem, TCommandParameterTargetItemValue>(
                _compositeItemBinding.TargetItemBinding,
                targetItemCommandParameterBinding);

            return(new CompositeItemCommandBindingBuilder <TSourceItem, TSourceItemValue, TTargetItem, TCommandParameterTargetItemValue>(
                       _compositeItemBinding.SourceItemBinding,
                       targetItemCommandBinding,
                       _bindingSet,
                       _compositeItemBinding));
        }
예제 #2
0
        public ITargetItemBindingBuilder <TSourceItem, TTargetItem> Bind <TTargetItem>(
            [CanBeNull] TTargetItem targetItem,
            ItemReferenceType referenceType = ItemReferenceType.Weak)
            where TTargetItem : class
        {
            var targetItemReference = new ItemReference <TTargetItem>(targetItem, referenceType);

            return(new TargetItemBindingBuilder <TSourceItem, TTargetItem>(_sourceItemReference, targetItemReference, this));
        }
예제 #3
0
        internal ItemReference([CanBeNull] TItem item, ItemReferenceType referenceType)
        {
            if (referenceType == ItemReferenceType.Weak)
            {
                _itemWeakReference = new WeakReference(item);
            }
            else
            {
                _itemStrongReference = item;
            }

            _referenceType = referenceType;
        }