相关文章推荐
长情的自行车  ·  Android File ...·  1 年前    · 
坚强的脸盆  ·  更新到最新的 Office ...·  2 年前    · 
会搭讪的熊猫  ·  unique_ptr reset ...·  2 年前    · 
备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 大白技术控的技术自留地 再见Xamarin,微软官宣跨平台 UI 框架 MAUI
2 0

海报分享

再见Xamarin,微软官宣跨平台 UI 框架 MAUI

Build 2020 大会上,微软终于正式公布 .NET 上的跨平台框架,正式版将在 .NET 6 和大家见面。

MAUI 是日益流行的 Xamarin.Forms 的进化,Xamarin.Forms 已经有6年历史了。多年来,UPS,Ernst&Young 和 Delta 等公司一直在利用 .NET 上的 Xamarin 来推动其业务发展。它在帮助小型企业最大化其 95% 以上代码共享的开发投资并击败竞争对手进入市场方面也非常成功。

MAUI 将这一成功扩展到移动设备上,使其包含桌面设备,这是跨两者构建多平台应用程序的最佳方法,尤其是新设备(例如新的Surface Duo)。

MAUI 简化了.NET开发人员的选择,提供了一个堆栈来支持所有现代工作负载:Android,iOS,macOS 和 Windows。每个平台和 UI 控件的本机功能都可以通过一个简单的跨平台 API 触手可及,您可以在提供不妥协的用户体验的同时共享比以前更多的代码。

单一项目开发体验

MAUI 的构建考虑了开发人员的生产力,包括开发人员需要的项目系统和跨平台工具。MAUI 将项目结构简化为一个针对多个平台的项目,这意味着您只需单击一下鼠标,便可以轻松地将其部署到所需的任何目标,包括台式机,仿真器,模拟器或物理设备。

使用内置的跨平台资源,您可以将任何图像,字体或翻译文件添加到单个项目中,并且 MAUI 会自动设置本机挂钩,以便您可以进行编码。

最后,您将始终可以访问本机底层操作系统 API,并且通过特定于新平台的集成将比以往更加轻松。

不同平台下,您可以添加特定操作系统的源代码文件并访问本机API。

有了 MAUI,一切都集中在一个地方,您可以保持生产力。

它能做到:

  • 一个针对多个平台和设备的项目
  • 一个位置来管理字体和图像等资源
  • 多目标组织您特定于平台的代码

只需要掌握一种构建客户端应用程序的方法:MAUI,那么所有平台都在您的控制范围之内。

拥有现代 App 的开发模式

.NET的愿景的一部分是在开发人员的个人喜好方面为开发人员提供选择,以便使用.NET可以提高工作效率。

这表明您在哪个IDE中使用Visual Studio 2019,Visual Studio for Mac甚至是Visual Studio Code。

MAUI将在所有这些版本中可用,并支持现有的MVVM和XAML模式以及将来的功能,例如使用C#甚至是Blazor的模型视图更新(MVU)。

MVVM

Model-View-ViewModel(MVVM)和 XAML 是 .NET 开发人员数十年来的主要模式和实践,它们是MAUI中的一流功能,这将继续发展,以帮助您高效地构建和维护生产应用程序。


<StackLayout>
    <Label Text="Welcome to MAUI!" />
    <Button Text="{Binding Text}" 
            Command="{Binding ClickCommand}" />
</StackLayout>
public Command ClickCommand { get; }
public string Text { get; set; } = "Click me";
int count = 0;
void ExecuteClickCommand ()
    count++;
    Text = $"You clicked {count} times.";

MVU

此外,我们使开发人员能够编写流畅的C# UI并实现日益流行的“Model-View-Update”(MVU)模式。

MVU促进数据和状态管理的单向流程,以及通过仅应用必要的更改来快速更新UI的代码优先开发经验。

下面是用 MAUI 编写的 MVU 风格的基本计数器示例。


readonly State<int> count = 0;
[Body]
View body() => new StackLayout
    new Label("Welcome to MAUI!"),
    new Button(
        () => $"You clicked {count} times.",
        () => count.Value ++)