public TreeViewItemWithIconViewModel(FilesTreeViewItem model, int stashId, FileIconsService fileIconService, VisualStudioGitService gitService)
        {
            _internalModel   = model;
            _fileIconService = fileIconService;
            _gitService      = gitService;

            Source = IsFile ?
                     _fileIconService.GetFileIcon("." + FileExtension) :
                     _fileIconService.GetFolderIcon(IsExpanded);

            var childNodes = model.Items.Select(m => new TreeViewItemWithIconViewModel(m, stashId, fileIconService, gitService)).ToList();

            Items = new ObservableCollection <TreeViewItemWithIconViewModel>(childNodes);

            CompareWithPreviousVersionCommand = new DelegateCommand(o =>
            {
                var treeItem = o as TreeViewItemWithIconViewModel;
                var filePath = treeItem?.FullPath;
                var fileName = treeItem?.Text;
                var isNew    = treeItem?.IsNew ?? false;
                var isStaged = treeItem?.IsStaged ?? false;

                _gitService.RunDiff(stashId, filePath, fileName, isNew, isStaged);
            });
        }
        private void TreeView_ExpandedOrCollapsed(object sender, RoutedEventArgs e)
        {
            var item = e.OriginalSource as TreeViewItem;

            if (item?.DataContext is TreeViewItemWithIcon itemWithIcon &&
                !itemWithIcon.IsFile)
            {
                itemWithIcon.Source = _fileIconsService.GetFolderIcon(item.IsExpanded);
            }
        }