示例#1
0
        /// <summary>
        /// 选中数据移动方法
        /// </summary>
        protected async Task Transfer(List <SelectedItem> source, List <SelectedItem> target)
        {
            if (!IsDisabled)
            {
                var items = source.Where(i => i.Active).ToList();
                source.RemoveAll(i => i.Active);
                items.ForEach(i => i.Active = false);
                target.AddRange(items);

                // 回调
                if (ItemsChanged.HasDelegate && Items != null)
                {
                    var s = Items.ToList();
                    LeftItems.ToList().ForEach(i =>
                    {
                        var index       = s.FindIndex(item => item.Value == i.Value && item.Text == i.Text && item.GroupName == i.GroupName);
                        s[index].Active = false;
                    });
                    RightItems.ToList().ForEach(i =>
                    {
                        var index       = s.FindIndex(item => item.Value == i.Value && item.Text == i.Text && item.GroupName == i.GroupName);
                        s[index].Active = true;
                    });
                    await ItemsChanged.InvokeAsync(s);
                }
            }
        }
示例#2
0
        /// <summary>
        /// 选中数据移动方法
        /// </summary>
        private async Task TransferItems(List <SelectedItem> source, List <SelectedItem> target)
        {
            if (!IsDisabled && Items != null)
            {
                var items = source.Where(i => i.Active).ToList();
                source.RemoveAll(i => items.Contains(i));
                target.AddRange(items);

                LeftItems.ForEach(i =>
                {
                    var item = Items.FirstOrDefault(item => item.Value == i.Value && item.Text == i.Text && item.GroupName == i.GroupName);
                    if (item != null)
                    {
                        item.Active = false;
                    }
                });
                RightItems.ForEach(i =>
                {
                    var item = Items.FirstOrDefault(item => item.Value == i.Value && item.Text == i.Text && item.GroupName == i.GroupName);
                    if (item != null)
                    {
                        item.Active = true;
                    }
                });

                Value = default;
                CurrentValueAsString = string.Join(",", RightItems.Select(i => i.Value));

                if (OnSelectedItemsChanged != null)
                {
                    await OnSelectedItemsChanged.Invoke(RightItems);
                }
            }
        }
    /// <summary>
    /// Fill Column list boxs.
    /// </summary>
    public void fill()
    {
        lstLeftColumn.Items.Clear();
        lstRightColumn.Items.Clear();
        // Fill left column
        if (mLeftItems != null)
        {
            for (int i = LeftItems.GetLowerBound(0); i <= LeftItems.GetUpperBound(0); i++)
            {
                ListItem li = new ListItem(LeftItems[i, 1], LeftItems[i, 0]);

                lstLeftColumn.Items.Add(li);
            }
        }

        // Fill right column
        if (mRightItems != null)
        {
            for (int i = RightItems.GetLowerBound(0); i <= RightItems.GetUpperBound(0); i++)
            {
                ListItem li = new ListItem(RightItems[i, 1], RightItems[i, 0]);
                lstRightColumn.Items.Add(li);
            }
        }
    }
示例#4
0
    /// <summary>
    /// OnParametersSet 方法
    /// </summary>
    protected override void OnParametersSet()
    {
        base.OnParametersSet();

        LeftPanelText ??= Localizer[nameof(LeftPanelText)];
        RightPanelText ??= Localizer[nameof(RightPanelText)];

        var list = CurrentValueAsString.Split(',', StringSplitOptions.RemoveEmptyEntries);

        LeftItems.Clear();
        RightItems.Clear();

        Items ??= Enumerable.Empty <SelectedItem>();

        // 左侧移除
        LeftItems.AddRange(Items);
        LeftItems.RemoveAll(i => list.Any(l => l == i.Value));

        // 右侧插入
        foreach (var t in list)
        {
            var item = Items.FirstOrDefault(i => i.Value == t);
            if (item != null)
            {
                RightItems.Add(item);
            }
        }
    }
 private void MoveToLeft(ListItemViewModel item)
 {
     if (item != null)
     {
         RightItems.Remove(item);
         LeftItems.Add(item);
     }
 }
示例#6
0
        /// <summary>
        /// OnInitialized 方法
        /// </summary>
        protected override void OnInitialized()
        {
            base.OnInitialized();

            if (Items != null)
            {
                LeftItems.AddRange(Items.Where(i => !i.Active));
                RightItems.AddRange(Items.Where(i => i.Active));
            }
        }
        private void ResetItems()
        {
            LeftItems.Clear();
            RightItems.Clear();
            if (Items != null)
            {
                LeftItems.AddRange(Items.Where(i => !i.Active));
            }

            if (Items != null)
            {
                RightItems.AddRange(Items.Where(i => i.Active));
            }
        }
示例#8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="value"></param>
 /// <param name="result"></param>
 /// <param name="validationErrorMessage"></param>
 /// <returns></returns>
 protected override bool TryParseValueFromString(string value, out TValue result, out string?validationErrorMessage)
 {
     validationErrorMessage = null;
     if (typeof(TValue) == typeof(string))
     {
         result = (TValue)(object)value;
     }
     else if (typeof(IEnumerable <string>).IsAssignableFrom(typeof(TValue)))
     {
         var v = value.Split(",", StringSplitOptions.RemoveEmptyEntries);
         result = (TValue)(object)new List <string>(v);
     }
     else if (typeof(IEnumerable <SelectedItem>).IsAssignableFrom(typeof(TValue)))
     {
         result = (TValue)(object)RightItems.Select(i => new SelectedItem(i.Value, i.Text)).ToList();
     }
     else
     {
         result = default !;
        /// <summary>
        /// 选中数据移动方法
        /// </summary>
        private async Task TransferItems(List <SelectedItem> source, List <SelectedItem> target)
        {
            IsTransfer = true;
            if (!IsDisabled && Items != null)
            {
                var items = source.Where(i => i.Active).ToList();
                source.RemoveAll(i => items.Contains(i));
                target.AddRange(items);

                LeftItems.ForEach(i =>
                {
                    var item = Items.FirstOrDefault(item => item.Value == i.Value && item.Text == i.Text && item.GroupName == i.GroupName);
                    if (item != null)
                    {
                        item.Active = false;
                    }
                });
                RightItems.ForEach(i =>
                {
                    var item = Items.FirstOrDefault(item => item.Value == i.Value && item.Text == i.Text && item.GroupName == i.GroupName);
                    if (item != null)
                    {
                        item.Active = true;
                    }
                });

                // 回调
                if (ItemsChanged.HasDelegate)
                {
                    await ItemsChanged.InvokeAsync(Items);
                }
                else
                {
                    StateHasChanged();
                }
            }
        }
        private void MapAndCompareCollections(IMDTreeItem Left, IMDTreeItem Right, ComparisonItem node)
        {
            IEnumerable <IMDTreeItem> LeftItems;
            IEnumerable <IMDTreeItem> RightItems;

            if (m_CurrentMode == MatchingMode.ByID)
            {
                LeftItems  = from item in Left.ChildItems orderby item.Key, item.Text select item;
                RightItems = from item in Right.ChildItems orderby item.Key, item.Text select item;
            }
            else
            {
                LeftItems  = from item in Left.ChildItems orderby item.Text, item.Text select item;
                RightItems = from item in Right.ChildItems orderby item.Text, item.Text select item;
            }

            var LeftList  = LeftItems.ToArray <IMDTreeItem>();
            var RightList = RightItems.ToArray <IMDTreeItem>();

            int leftIdx    = 0;
            int rightIdx   = 0;
            int leftCount  = LeftList.Length - 1;
            int rightCount = RightList.Length - 1;

            bool Modified = false;

            while (true)
            {
                if (leftIdx > leftCount)
                {
                    rightIdx++;
                    if (rightIdx > rightCount)
                    {
                        break;
                    }

                    var Item = RightList[rightIdx];
                    AddAndFillNewNode(null, Item, node);
                    Modified = true;
                    continue;
                }

                if (rightIdx > rightCount)
                {
                    leftIdx++;
                    if (leftIdx > leftCount)
                    {
                        break;
                    }

                    var Item = LeftList[leftIdx];
                    AddAndFillNewNode(Item, null, node);
                    Modified = true;
                    continue;
                }

                var LeftItem  = LeftList[leftIdx];
                var RightItem = RightList[rightIdx];

                int?comparisonResult = CompareObjects(LeftItem, RightItem);

                if (comparisonResult == 0)
                {
                    var addedNode = AddAndFillNewNode(LeftItem, RightItem, node);
                    if (addedNode != null)
                    {
                        Modified = Modified || addedNode.IsDiffer;
                    }

                    leftIdx++;
                    rightIdx++;
                }
                else if (comparisonResult < 0)
                {
                    AddAndFillNewNode(LeftItem, null, node);
                    Modified = true;
                    leftIdx++;
                }
                else if (comparisonResult > 0)
                {
                    AddAndFillNewNode(null, RightItem, node);
                    Modified = true;
                    rightIdx++;
                }
                else
                {
                    AddAndFillNewNode(LeftItem, null, node);
                    AddAndFillNewNode(null, RightItem, node);

                    leftIdx++;
                    rightIdx++;

                    Modified = true;
                }
            }

            if (Modified)
            {
                node.IsDiffer = true;
            }
        }