Пример #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FolderVM"/> class.
 /// </summary>
 /// <param name="another">Another <see cref="FolderVM"/> instance to copy data from.</param>
 protected FolderVM(FolderVM another)
 {
     AbsolutePath = another.AbsolutePath;
     isSelected   = another.IsSelected;
     Model        = another.Model;
     Folder       = another.Folder;
 }
Пример #2
0
        /// <summary>
        /// Fetch data from corresponding folder model and its childs folder and files.
        /// </summary>
        public override void Refresh()
        {
            base.Refresh();

            IList <IViewModel> list = new List <IViewModel>();

            foreach (DirectoryInfo folder in Model.Folders(Folder.FullName))
            {
                var vm = new FolderVM(Model)
                {
                    AbsolutePath = folder.FullName
                };

                vm.Refresh();
                list.Add(vm);
            }

            foreach (FileInfo file in Model.Files(Folder.FullName))
            {
                var vm = new FileVM(Model)
                {
                    AbsolutePath = file.FullName
                };

                vm.Refresh();
                list.Add(vm);
            }

            // Sorting by file extenshion and, then, by file name.
            // TODO: make it configurable: sorting childs
            IOrderedEnumerable <IViewModel> sortedList =
                list.OrderBy(vm => vm is FileVM)
                .ThenBy(
                    vm => (vm is FileVM)
                                                ? ((FileVM)vm).Extension.ToLowerInvariant()
                                                : string.Empty)
                .ThenBy(
                    vm => (vm is FileVM)
                                                ? ((FileVM)vm).Name.ToLowerInvariant()
                                                : string.Empty);
            // -- TODOEND --

            // TODO: remove this temporary "parent simulator" from childs collection
            // and make it separate in UI and code, but navigatable like always.
            IEnumerable <IViewModel> resultList = Enumerable.Empty <IViewModel>();

            var fullVM = NavigateOut();
            var parent = new ParentNodeVM(fullVM)
            {
                AbsolutePath = ((IViewModel)fullVM).AbsolutePath
            };

            resultList = Enumerable.Repeat((IViewModel)parent, 1);

            resultList = resultList.Concat(sortedList);
            // -- TODOEND --

            OnPropertyChanging("Childs");
            childs.Clear();
            childs = new ObservableCollection <IViewModel>(resultList);
            OnPropertyChanged("Childs");

            if (CurrentItemIndex == -1 && childs.Count > 0)
            {
                CurrentItemIndex = 0;
            }

            Header.Text = Name;

            var imageConverter = new FileToIconConverter
            {
                DefaultSize = 16
            };

            Header.Icon = imageConverter.GetImage(AbsolutePath, 16);
        }