.NET MAUI实战 FolderPicker

1.概要

最近在迁移 GeneralUpdate.Tool的时候需要用到文件夹选择,在MAUI中可以使用FolderPicker进行选择。注意,和上篇文章的文件选择不一样。因为在.NET MAUI中目前还没有傻瓜式直接可用的FolderPicker供开发者使用所以需要自己动手做一些修改。

完整示例代码:https://gitee.com/Juster-zhu/GeneralUpdate/tree/master/src/c%23/GeneralUpdate.PacketTool

2.详细内容

实现步骤如下:

  1. 定义接口

56c1b17e82d7296ed36bd11c1d6b0a0d.png

public interface IFolderPickerService{Task<string> PickFolderTaskAsync();}

2.在每个受支持的平台上实现接口

da90beb1222ed32be7f3a54a9e79d27d.png

using GeneralUpdate.Infrastructure.DataServices.Pick;
using WindowsFolderPicker = Windows.Storage.Pickers.FolderPicker;namespace GeneralUpdate.PacketTool.Platforms.Windows
{public class FolderPicker : IFolderPickerService{public async Task<string> PickFolderTaskAsync(){var folderPicker = new WindowsFolderPicker();// Might be needed to make it work on Windows 10folderPicker.FileTypeFilter.Add("*");// Get the current window's HWND by passing in the Window objectvar hwnd = ((MauiWinUIWindow)App.Current.Windows[0].Handler.PlatformView).WindowHandle;// Associate the HWND with the file pickerWinRT.Interop.InitializeWithWindow.Initialize(folderPicker, hwnd);var result = await folderPicker.PickSingleFolderAsync();return result?.Path;}}
}

3.向.NET MAUI框架容器中注入FolderPicker注册实现

一定需要记住下面代码中的这个using引用。

using GeneralUpdate.Infrastructure.DataServices.Pick;

不可以删除因为加入了环境的判断会导致在编码时认为是无效应用,实际运行时会使用到该命名空间。

#if WINDOWSmauiAppBuilder.Services.AddTransient<IFolderPickerService, Platforms.Windows.FolderPicker>();
#elif MACCATALYSTmauiAppBuilder.Services.AddTransient<IFolderPickerService, Platforms.MacCatalyst.FolderPicker>();
#endif

实际代码如下。

using GeneralUpdate.Infrastructure.DataServices.Pick;
using GeneralUpdate.PacketTool.ViewModels;namespace GeneralUpdate.PacketTool
{public static class MauiProgram{public static MauiApp CreateMauiApp(){var builder = MauiApp.CreateBuilder();builder.UseMauiApp<App>().RegisterViewModels().RegisterView().RegisterAppServices().RegisterOther().ConfigureFonts(fonts =>{fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");});return builder.Build();}public static MauiAppBuilder RegisterOther(this MauiAppBuilder mauiAppBuilder){mauiAppBuilder.Services.AddTransient<App>();return mauiAppBuilder;}public static MauiAppBuilder RegisterView(this MauiAppBuilder mauiAppBuilder){mauiAppBuilder.Services.AddTransient<MainPage>();return mauiAppBuilder;}public static MauiAppBuilder RegisterViewModels(this MauiAppBuilder mauiAppBuilder){mauiAppBuilder.Services.AddTransient<MainViewModel>();return mauiAppBuilder;}public static MauiAppBuilder RegisterAppServices(this MauiAppBuilder mauiAppBuilder){
#if WINDOWSmauiAppBuilder.Services.AddTransient<IFolderPickerService, Platforms.Windows.FolderPicker>();
#elif MACCATALYSTmauiAppBuilder.Services.AddTransient<IFolderPickerService, Platforms.MacCatalyst.FolderPicker>();
#endifreturn mauiAppBuilder;}}
}

4.使用功能

  • 如何使用

将我们刚刚在容器中注入好的FolderPickerService取出来,并初始化ViewModel中的引用。

public class MainViewModel : ViewModeBase{//code...public MainViewModel(IFolderPickerService folderPickerService) {_folderPickerService = folderPickerService;}//code...}

FolderPickerService调用。

/// <summary>/// Choose a path/// </summary>/// <param name="value"></param>private async Task SelectFolderAction(string value){var pickerResult = await _folderPickerService.PickFolderTaskAsync();if (pickerResult == null){await Shell.Current.DisplayAlert("Pick options", "No results were selected !", "ok");return;}switch (value){case "Source":SourcePath = pickerResult;break;case "Target":TargetPath = pickerResult;break;case "Patch":PatchPath = pickerResult;break;}}
  • 运行效果如下

b00ab26290fd68556425249ca360d139.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

h5外卖源码php_校园食堂外卖APP走红 更多APP定制开发上一品威客网

近日&#xff0c;西安一高校推出了一款校园食堂外卖APP走红网络。该APP涵盖学校食堂的所有饭菜&#xff0c;并可给该校的师生提供校园食堂饭菜外卖服务。饭菜价格与食堂统一&#xff0c;且仅供该校内的师生使用。 目前开发校园外卖订餐系统可谓是一个较热门的创业项目&#xff…

微信自定义tabbar有小红点_自定义微信小程序tabBar组件上边框的颜色

背景&#xff1a;在微信小程序的实际开发过程中&#xff0c;有时候我们需要修改微信小程序提供的 tabBar 组件顶部边框的颜色&#xff0c;以满足项目需求解决方案&#xff1a;方式一&#xff1a;通过tabBar组件自带的 borderStyle 属性来控制边框的颜色&#xff0c;将边框的颜色…

又一批优质.NET6实战项目,面临永久下线...

多好的实战项目大家抓紧时间实操起来呀移动电商实战这次能上岸&#xff0c;最重要的是这个Vue3VantUI.NET6SqlSugar移动电商实战&#xff0c;全部都是最新最热的技术栈&#xff0c;写上简历后面试基本上都是问的这块儿内容。我先给大家看看项目的UI。项目UI全套实战源码这个电商…

laravel 配置微信公众号时{errcode:-106,errmsg:token check fail}

一、问题描述 做微信授权登录时&#xff0c;遇到的一个坑&#xff0c;提示配置失败&#xff0c;F12&#xff0c;响应为 errcode":-106,"errmsg":"token check fail 二、解决方案&#xff1a; 注&#xff1a;宗旨就是让微信能够访问你填写的网址&#xff…

电商企业怎样用好大数据

电商企业怎样用好大数据 大数据正在促生新的蓝海&#xff0c;催生新的经济增长点&#xff0c;正在成为政府和企业竞争的新焦点。2012年&#xff0c;瑞士达沃斯论坛发布《大数据&#xff0c;大影响》报告&#xff0c;称“数据已经成为一种新的经济资产类别&#xff0c;就像货币或…

同步方法 调用异步防范_Spring一个注解实现方法的异步调用,再也不用单开线程了...

介绍同步调用先来演示一下什么是同步调用测试方法输出如下doTaskOne start 1566121320372doTaskOne end 1566121321373doTaskTwo start 1566121321373doTaskTwo end 1566121322374可以看到方法一执行完毕&#xff0c;方法二才会执行异步调用不返回值1.Spring Boot启动类上加Ena…

【源码探索】.NET中的List,是哪种数据结构

“当你提出疑问并开始思考时&#xff0c;答案就离你不远了”图片&#xff1a;奥森公园的向日葵 拍摄于2022年7月23日 摄影师&#xff1a;刘先生01—问题缘起严格来说应该是List<T>&#xff0c;因为.NET的核心基础类库中&#xff0c;并没有List&#xff0c;作为泛型类型的…

dpdk对虚拟化的支持调研

目录&#xff1a; 虚拟化dpdk的实现研究 virtiovhostSR-IOV热迁移相关研究拓展本文记录近期对dpdk在虚拟化和云计算领域应用的研究成果&#xff0c;内容梳理如下。 虚拟化 虚拟化&#xff0c;抽象来说&#xff0c;就是将物理资源逻辑化。具体来说&#xff0c;虚拟技术的实现是在…

隐藏键盘_三星新专利:带有隐藏键盘的三折叠屏手机

10月31日消息 众所周知&#xff0c;三星现已推出四款折叠屏机型(Fold、Fold 2、Z Flip、W20)&#xff0c;而此前多有传言表示三星下一代折叠屏机型(以 Galaxy Z Fold 3 代称)将在目前折叠屏手机的基础上增加 S Pen&#xff0c;而昨日公布的一份专利也侧面辅证了这一说法。此外&…

Blazor学习之旅(3)实现一个Todo应用

【Blazor】| 总结/Edison Zhou大家好&#xff0c;我是Edison。最近在学习Blazor做全栈开发&#xff0c;因此根据老习惯&#xff0c;我会将我的学习过程记录下来&#xff0c;一来体系化整理&#xff0c;二来作为笔记供将来翻看。本篇&#xff0c;我们通过一个简单的Todo示例应用…

JavaScript 省市级联效果

为什么80%的码农都做不了架构师&#xff1f;>>> JavaScript 省市级联效果 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2 <html xmlns"http…

20分钟完成Mac上的 LNMP 环境部署,优雅·高效开发(Docker方式)

一、前言 对于很多开发者来说&#xff0c;突然转到在 mac 系统开发&#xff0c;可能会非常难受&#xff0c;主要有以下几个原因 1、mac 上安装软件程序坑多&#xff0c;比如安装 PHP、Nginx&#xff0c;会存在很多使用 linux 或 windows 时没有遇到过的坑 2、对 mac 系统不熟…

可编程交换时代就在这里

在第一批网络处理器推出20年后&#xff0c;我们正在向完全可编程数据平面迈进&#xff0c;网络运营商在虚拟化方面的努力推动了这一趋势的发展。 大多数物理网络系统正在被运行在网络核心和边缘的服务器上的虚拟网络功能&#xff08;VNF&#xff09;取代。这些服务器一般采用通…

调试 不弹出 小米_时隔六年,小米NFC碰碰贴复活,碰一下自动亮灯、联网、投屏...

有朋友问我&#xff0c;NFC除了刷门禁、刷公交、离线支付外&#xff0c;还能干什么&#xff1f;实际上NFC的应用场景远不止于此&#xff0c;今天就带大家开开眼界。今年是小米十周年&#xff0c;各种酷玩新品不断&#xff0c;其中“小米碰碰贴2”就是一款便宜又好玩的产品。小米…

微信小程序把玩(三)tabBar底部导航

为什么80%的码农都做不了架构师&#xff1f;>>> tabBar相对而言用的还是比较多的&#xff0c;但是用起来并没有难&#xff0c;在app.json中配置下tabBar即可&#xff0c;注意tabBar至少需要两个最多五个Item选项 主要属性&#xff1a; 对于tabBar整体属性设置&…

WPF 之列表分页控件

WPF 之列表分页控件控件名&#xff1a;WindowAcrylicBlur作者&#xff1a; WPFDevelopersOrg - 黄佳 | 驚鏵原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40。Visual Studio 2022。项目使用 MIT 开源许可协议。新建Paginat…

禁止sethc.exe运行 防止3389的sethc后门

废话&#xff1a;在土司看到的一篇文章,发私信给那个哥们儿说让不让转载,结果还没回复我就在百度看到相同的文章。他自己也是转载的。这哥们儿ID迟早被ban 文章转载自:http://www.jb51.net/hack/64484.html 点“开始”&#xff0c;在“运行”中敲入gpedit.msc依次展开“用户配置…

Mac 与虚拟机中的linux集群共享文件目录设置

一、环境介绍 本机&#xff1a;Macos Big Sur系统 虚拟机软件&#xff1a;vmware-fusion 虚拟机上虚拟的linux - centos7 系统 二、实现的效果 在mac上创建一个/Users/SH-Server/vm-vagrant目录&#xff0c;作为之后和虚拟机linux系统 /data 文件夹的共享目录。 我们最终想…

AWD-LSTM为什么这么棒?

摘要&#xff1a; AWD-LSTM为什么这么棒&#xff0c;看完你就明白啦&#xff01;AWD-LSTM是目前最优秀的语言模型之一。在众多的顶会论文中&#xff0c;对字级模型的研究都采用了AWD-LSTMs&#xff0c;并且它在字符级模型中的表现也同样出色。 本文回顾了论文——Regularizing …

Mac上,为虚拟机集群上的每台虚拟机设置固定IP

一、环境介绍 本机&#xff1a;macOS系统 虚拟机软件&#xff1a;VMware Fusion 虚拟机上&#xff1a;centos7内核的Linux系统集群 二、为什么要为每台虚拟机设置固定ip 由于每次启动虚拟机&#xff0c;得到的ip可能不一样&#xff0c;这样对远程连接非常不友好&#xff0c…