コード例 #1
0
        /// <summary>
        /// Get the items for the desired list
        /// </summary>
        /// <param name="provider">Data Provider used to retrieve the items</param>
        /// <param name="showCode">Whether to show codes on the items</param>
        /// <returns>A new collection of ListItemVM objects making up the desired list</returns>
        public IEnumerable <ViewModels.ListItemVM> GetItemVMs(DataProviders.IAppDataProvider provider, bool showCode, ViewModels.SearchVM parentVM)
        {
            if (String.IsNullOrWhiteSpace(SearchFor))
            {
                yield break;
            }

            var  allResults = provider.GetSearch(SearchFor, Skip, TakeAtATime + 1);
            bool hasMore    = (allResults.Count > TakeAtATime);

            Skip += (hasMore) ? TakeAtATime : allResults.Count;

            var index   = 0;
            var results = from result in allResults.Take(TakeAtATime)
                          group result by result.RetrievedFrom;

            foreach (var type in SearchTypes)
            {
                var currMatches = (from result in results
                                   where result.Key == type.Key
                                   from ret in result
                                   select ret).ToArray();
                if (currMatches.Length > 0)
                {
                    if (!String.Equals(lastRetrievedFrom, type.Key))
                    {
                        yield return(new ListItemVM(0,
                                                    IcdCodeItemMethods.NewDividerItem(type.Value),
                                                    Enumerable.Empty <string>(), showCode)
                        {
                            ParentVM = parentVM
                        });

                        lastRetrievedFrom = type.Key;
                    }

                    foreach (var match in currMatches)
                    {
                        ++index;
                        yield return(new ListItemVM(index,
                                                    match.ToIcdCodeItem(provider),
                                                    Enumerable.Empty <string>(), showCode)
                        {
                            ParentVM = parentVM
                        });
                    }
                }
            }

            if (hasMore)
            {
                yield return(new ListItemVM(0,
                                            IcdCodeItemMethods.NewMoreItem(),
                                            Enumerable.Empty <string>(), showCode)
                {
                    ParentVM = parentVM
                });
            }
        }
コード例 #2
0
        /// <summary>
        /// Convert Child items into new ViewModel Items
        /// </summary>
        /// <param name="inItems">Children items to convert</param>
        /// <param name="parentVM">ListVM object that is the highest parent</param>
        /// <param name="itemParentVM">The parent Item's ViewModel</param>
        /// <returns>New range of ListItemVM objects for the children</returns>
        public static IEnumerable <ListItemVM> GetChildItems(IEnumerable <IcdCodeItem> inItems, SearchVM parentVM, ListItemVM itemParentVM)
        {
            var useParentTitle = new List <string>();

            if (itemParentVM != null)
            {
                useParentTitle.AddRange(itemParentVM.ParentTitle);
                useParentTitle.Add(itemParentVM.Title.Title);
            }

            var resultGroups = from child in inItems
                               group child by child.Code.ChildType;


            var directChildren = (from result in resultGroups
                                  where result.Key == IcdCodeStrings.ChildType_Direct
                                  from ret in result
                                  select ret).ToList();

            if (directChildren.Count > 0)
            {
                yield return(new ListItemVM(0, IcdCodeItemMethods.NewDividerItem(SpecificityString), Enumerable.Empty <string>())
                {
                    ParentVM = parentVM,
                    ParentItemVM = itemParentVM
                });

                foreach (var child in directChildren)
                {
                    yield return(new ListItemVM(0, child, useParentTitle)
                    {
                        ParentVM = parentVM,
                        ParentItemVM = itemParentVM
                    });
                }
                yield break;
            }

            foreach (var type in ChildTypes)
            {
                var currChildren = (from result in resultGroups
                                    where result.Key == type.Key
                                    from ret in result
                                    select ret).ToList();
                if (currChildren.Count > 0)
                {
                    yield return(new ListItemVM(0, IcdCodeItemMethods.NewDividerItem(type.Value), Enumerable.Empty <string>())
                    {
                        ParentVM = parentVM,
                        ParentItemVM = itemParentVM
                    });

                    foreach (var child in currChildren)
                    {
                        yield return(new ListItemVM(0, child, Enumerable.Empty <string>())
                        {
                            ParentVM = parentVM,
                            ParentItemVM = itemParentVM
                        });
                    }
                }
            }
        }