diff --git a/FileManager_UWP/FileManager_UWP.csproj b/FileManager_UWP/FileManager_UWP.csproj index be28b7f..6e95c8a 100644 --- a/FileManager_UWP/FileManager_UWP.csproj +++ b/FileManager_UWP/FileManager_UWP.csproj @@ -120,7 +120,10 @@ App.xaml + + + diff --git a/FileManager_UWP/Model/DisplayFileFolderItem.cs b/FileManager_UWP/Model/DisplayFileFolderItem.cs index 268c00b..6def041 100644 --- a/FileManager_UWP/Model/DisplayFileFolderItem.cs +++ b/FileManager_UWP/Model/DisplayFileFolderItem.cs @@ -12,9 +12,9 @@ using Windows.UI.Xaml.Media.Imaging; namespace FileManager_UWP.Model { /// - /// 显示用的文件文件夹统一类 + /// 显示用的文件文件夹统一类, 已废弃 /// - public class DisplayFileFolderItem { + class DisplayFileFolderItem { public string Name { get; set; } public string Path { get; set; } public bool IsFolder { get; set; } @@ -74,18 +74,13 @@ namespace FileManager_UWP.Model { return obj; } - public async static Task parent(string current) { - DisplayFileFolderItem d = new DisplayFileFolderItem - { - Name = "..", - IsFolder = true, - Path = current.Substring(0, current.LastIndexOf('\\')) - - }; - if (d.Path.Length == 2) - d.Path += "\\"; - StorageFolder file = await StorageFolder.GetFolderFromPathAsync(d.Path); + public static async Task parent(string current) { + string path = current.Substring(0, current.LastIndexOf('\\')); + if (path.Length == 2) + path += "\\"; + StorageFolder file = await StorageFolder.GetFolderFromPathAsync(path); var thumbnail = await file.GetThumbnailAsync(ThumbnailMode.ListView, 32); + DisplayFileFolderItem d = new DisplayFileFolderItem(file); await d.Icon.SetSourceAsync(thumbnail).AsTask(); return d; } diff --git a/FileManager_UWP/Model/DisplayableFile.cs b/FileManager_UWP/Model/DisplayableFile.cs new file mode 100644 index 0000000..1af5937 --- /dev/null +++ b/FileManager_UWP/Model/DisplayableFile.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.Storage; +using Windows.Storage.FileProperties; +using Windows.UI.Xaml.Media.Imaging; + +namespace FileManager_UWP.Model +{ + public class DisplayableFile: IDisplayable { + private readonly StorageFile _file; + private readonly BitmapImage _icon; + + private DisplayableFile(StorageFile f) { + _file = f; + _icon = new BitmapImage(); + } + + public static async Task GetInstanceAsync(StorageFile f) { + DisplayableFile obj = new DisplayableFile(f); + var thumbnail = await f.GetThumbnailAsync(ThumbnailMode.ListView, 32); + await obj._icon.SetSourceAsync(thumbnail).AsTask(); + return obj; + } + + public string Name => _file.Name; + + public string Path => _file.Path; + + public bool IsFolder => false; + + public BitmapImage Icon => _icon; + } +} diff --git a/FileManager_UWP/Model/DisplayableFolder.cs b/FileManager_UWP/Model/DisplayableFolder.cs new file mode 100644 index 0000000..05c020e --- /dev/null +++ b/FileManager_UWP/Model/DisplayableFolder.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.Storage; +using Windows.Storage.FileProperties; +using Windows.UI.Xaml.Media.Imaging; + +namespace FileManager_UWP.Model +{ + public class DisplayableFolder: IDisplayable { + private readonly StorageFolder _folder; + private readonly BitmapImage _icon; + + private DisplayableFolder(StorageFolder f) { + _folder = f; + _icon = new BitmapImage(); + } + + public static async Task GetInstanceAsync(StorageFolder f) + { + DisplayableFolder obj = new DisplayableFolder(f); + var thumbnail = await f.GetThumbnailAsync(ThumbnailMode.ListView, 32); + await obj._icon.SetSourceAsync(thumbnail).AsTask(); + return obj; + } + + public static async Task GetParentAsync(StorageFolder f) { + string path = f.Path.Substring(0, f.Path.LastIndexOf('\\')); + if (path.Length == 2) + path += "\\"; + StorageFolder file = await StorageFolder.GetFolderFromPathAsync(path); + return await GetInstanceAsync(file); + } + + public string Name => _folder.Name; + + public string Path => _folder.Path; + + public bool IsFolder => true; + + public BitmapImage Icon => _icon; + } +} diff --git a/FileManager_UWP/Model/IDisplayable.cs b/FileManager_UWP/Model/IDisplayable.cs new file mode 100644 index 0000000..4cfcf9b --- /dev/null +++ b/FileManager_UWP/Model/IDisplayable.cs @@ -0,0 +1,15 @@ +using Windows.UI.Xaml.Media.Imaging; + +namespace FileManager_UWP.Model +{ + public interface IDisplayable { + string Name { get; } + string Path { get; } + bool IsFolder { get; } + BitmapImage Icon { get; } + //string Name(); + //string Path(); + //bool IsFolder(); + //BitmapImage Icon(); + } +} diff --git a/FileManager_UWP/Service/FileService.cs b/FileManager_UWP/Service/FileService.cs index 0a173ca..418a532 100644 --- a/FileManager_UWP/Service/FileService.cs +++ b/FileManager_UWP/Service/FileService.cs @@ -18,45 +18,38 @@ namespace FileManager_UWP.Service { /// /// 路径 /// 文件和文件夹列表 - public async Task> GetDisplayFileFolderList(string path) { + public async Task> GetDisplayFileFolderList(string path) { StorageFolder folder = null; try { folder = await StorageFolder.GetFolderFromPathAsync(path); + IReadOnlyList folders = await folder.GetFoldersAsync(); + IReadOnlyList files = await folder.GetFilesAsync(); + List displayFileFolderItems = + new List { await DisplayableFolder.GetParentAsync(folder) }; + //displayFileFolderItems.AddRange(folders + // .Select(async i => await DisplayFileFolderItem.GetInstance(i)) + // .Select(i => i.Result) + //); + //displayFileFolderItems.AddRange(files + // .Select(async i => await DisplayFileFolderItem.GetInstance(i)) + // .Select(i => i.Result) + //); + + foreach (var file in folders) { + displayFileFolderItems.Add( + await DisplayableFolder.GetInstanceAsync(file)); + } + + foreach (var file in files) { + displayFileFolderItems.Add( + await DisplayableFile.GetInstanceAsync(file)); + } + + return displayFileFolderItems; } catch (Exception ex) { Debug.WriteLine(ex.Message); throw; } - IReadOnlyList folders = await folder.GetFoldersAsync(); - IReadOnlyList files = await folder.GetFilesAsync(); - //List displayFileFolderItems = - // folders.Select(async i => - // await DisplayFileFolderItem.GetInstance(i)); - //displayFileFolderItems.AddRange(files.Select( - // i => new DisplayFileFolderItem(i))); - // displayFileFolderItems.AddRange(files.Select(DisplayFileFolderItem.getInstance) as IEnumerable); - - List displayFileFolderItems = - new List {await DisplayFileFolderItem.parent(path)}; - //displayFileFolderItems.AddRange(folders - // .Select(async i => await DisplayFileFolderItem.GetInstance(i)) - // .Select(i => i.Result) - //); - //displayFileFolderItems.AddRange(files - // .Select(async i => await DisplayFileFolderItem.GetInstance(i)) - // .Select(i => i.Result) - //); - foreach (var file in folders) - { - displayFileFolderItems.Add( - await DisplayFileFolderItem.GetInstance(file)); - } - foreach (var file in files) - { - displayFileFolderItems.Add( - await DisplayFileFolderItem.GetInstance(file)); - } - - return displayFileFolderItems; } } } diff --git a/FileManager_UWP/View/FileListView.xaml b/FileManager_UWP/View/FileListView.xaml index 7e0443c..4268616 100644 --- a/FileManager_UWP/View/FileListView.xaml +++ b/FileManager_UWP/View/FileListView.xaml @@ -3,7 +3,9 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:Custom="using:Microsoft.Xaml.Interactivity" xmlns:Custom1="using:Microsoft.Xaml.Interactions.Core" + xmlns:Custom="using:Microsoft.Xaml.Interactivity" + xmlns:Custom1="using:Microsoft.Xaml.Interactions.Core" + xmlns:model="using:FileManager_UWP.Model" x:Class="FileManager_UWP.View.FileListView" mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> @@ -44,7 +46,6 @@ IsDoubleTapEnabled="True" IsTapEnabled="True" - DoubleTapped="{x:Bind Path=vm.HandleDoubleTapped}" > @@ -65,14 +66,16 @@ Foreground="{ThemeResource SystemControlPageTextBaseHighBrush}" Margin="12,0,0,0"/> - - - - - + + + + + + + /// 文件和文件夹列表 /// - private IEnumerable _displayFileFolderItems; - public IEnumerable DisplayFileFolderItems { + private IEnumerable _displayFileFolderItems; + public IEnumerable DisplayFileFolderItems { get => _displayFileFolderItems; set => Set(nameof(DisplayFileFolderItems), ref _displayFileFolderItems, value); } @@ -46,26 +46,24 @@ namespace FileManager_UWP.ViewModel { public RelayCommand RefreshCommand => _refreshCommand ?? (_refreshCommand = new RelayCommand(async () => { var fileService = new FileService(); - var fileList = await fileService.GetDisplayFileFolderList(Path); - DisplayFileFolderItems = fileList; + try { + var fileList = await fileService.GetDisplayFileFolderList(Path); + DisplayFileFolderItems = fileList; + } catch (Exception e) { + Debug.WriteLine(e.Message); + } })); private object _listSelectedItem; public object ListSelectedItem { get => _listSelectedItem; - set - { - Set(nameof(ListSelectedItem), ref _listSelectedItem, value); - } + set => Set(nameof(ListSelectedItem), ref _listSelectedItem, value); } private List _listSelectedItems; public List ListSelectedItems { get => _listSelectedItems; - set { - Debug.WriteLine("Select " + ((DisplayFileFolderItem)ListSelectedItems[0]).Name); - Set(nameof(ListSelectedItems), ref _listSelectedItems, value); - } + set => Set(nameof(ListSelectedItems), ref _listSelectedItems, value); } /// @@ -74,7 +72,7 @@ namespace FileManager_UWP.ViewModel { private RelayCommand _doubleTappedCommand; public RelayCommand DoubleTappedCommand => _doubleTappedCommand ?? (_doubleTappedCommand = new RelayCommand( - async () => { + () => { DisplayFileFolderItem i = ListSelectedItem as DisplayFileFolderItem; Debug.WriteLine("Double tapped"); if (i != null && i.IsFolder)