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