标签: maui

MAUI 项目,无法导航到新页面

我在 MAUI 中遇到了一个错误,我只是想知道我是否是唯一的一个,或者我在这个新环境中是否做错了什么:)

之前我总是能够在通过单击按钮导航到新页面时执行此操作:

private async void OnButtonClicked(object sender, EventArgs e)
       {
           await Navigation.PushAsync(new Page1());
       } 
Run Code Online (Sandbox Code Playgroud)

但它似乎不再起作用了,这就是我的 Page1 在 C# 代码中的样子:

    public partial class Page1 : ContentPage
    {
        public Page1()
        {
           InitializeComponent();
        }

        protected override async void OnAppearing()
        {
            base.OnAppearing();

            await MainThread.InvokeOnMainThreadAsync(async () => { await LoadRecipes(); });
        }

        private async Task LoadRecipes() 
        {

           //no code yet
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码并单击按钮时,没有任何反应。

c# maui

9
推荐指数
2
解决办法
1万
查看次数

.Net MAUI - AppShell 导航和依赖项注入

我正在尝试 .Net Maui、AppShell 和依赖注入。

我尝试使用构造函数调用页面,该构造函数将此页面的 ViewModel 作为参数。

构造函数如下所示:

public AuthenticationPage(AuthenticationViewModel viewModel)
{
    InitializeComponent();
    BindingContext = viewModel;
}
Run Code Online (Sandbox Code Playgroud)

在我的 MauiProgram.cs 中,我注册了页面和虚拟机

builder.Services.AddSingleton<AuthenticationViewModel>();
builder.Services.AddSingleton<AuthenticationPage>();
Run Code Online (Sandbox Code Playgroud)

我的 App.xaml.cs 如下所示:

public partial class App : Application
{
    public App()
    {
        InitializeComponent();
        MainPage = new AppShell();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 AppShell.xaml 如下所示:

<Shell  xmlns="http://schemas.microsoft.com/dotnet/2021/maui" 
           xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
           xmlns:pages="clr-namespace:DeepBlue.Pages"
           xmlns:auth="clr-namespace:DeepBlue.Pages.Authentication"
           x:Class="DeepBlue.AppShell">

    <!-- Login and Registration Page -->
    <ShellContent Route="login"
                  ContentTemplate="{DataTemplate auth:AuthenticationPage}">
    </ShellContent>

    <!-- Main Page -->
    <FlyoutItem Route="main"
                FlyoutDisplayOptions="AsMultipleItems">
        <ShellContent Route="dashboard"
                      ContentTemplate="{DataTemplate pages:DashboardPage}"
                      Title="Home" />
    </FlyoutItem>

</Shell>
Run Code Online (Sandbox Code Playgroud)

现在,当我执行我的项目时,出现以下错误:

System.MissingMethodException:“没有为类型‘DeepBlue.Pages.Authentication.AuthenticationPage’定义无参数构造函数。”

有人可以告诉我为什么依赖注入在这种情况下不起作用吗? …

.net c# dependency-injection maui

9
推荐指数
2
解决办法
1万
查看次数

将 Serilog 与 .NET MAUI 结合使用

我有一个非常简单的 .NET MAUI 应用程序(不是 Blazor 应用程序)。我已经安装了 Seriolog 和 Serilog.Extensions.Logging (这样我就可以使用 AppCenter)。我的启动代码中有以下内容来初始化 Serilog

public static MauiApp CreateMauiApp()
{
    // set up logging
    var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    path = Path.Combine(path, "debugcode.txt");

    Log.Logger = new LoggerConfiguration()
        //.MinimumLevel.Debug()
        .WriteTo.File(path)
        .WriteTo.AppCenterCrashes(restrictedToMinimumLevel: LogEventLevel.Information)
        .WriteTo.Console()
        .CreateLogger();

    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        })
        .Logging.AddSerilog(Log.Logger);


    return builder.Build();
}
Run Code Online (Sandbox Code Playgroud)

这编译没有问题。我已将日志记录代码添加到 main.xaml.cs 中(该代码只是 VisualStudio 附带的默认 .NET MAUI 测试应用程序)。最小调试行已被注释掉,但如果不注释掉也没有什么区别。

protected override void OnDisappearing()
{
    base.OnDisappearing();
    Log.CloseAndFlush();
}

void OnCounterClicked(object sender, EventArgs e)
{
    count++; …
Run Code Online (Sandbox Code Playgroud)

maui

9
推荐指数
1
解决办法
6413
查看次数

.NET Maui 项目模板错误 - 找不到类型或命名空间名称“Android”

我正在尝试启动一个新的 .net Maui 项目。我没有向启动项目模板添加任何代码。

Microsoft Visual Studio Community 2022(64 位)预览版 17.2.0 预览版 5.0 .NET Framework 4.7.2

重现步骤:

  1. 选择“新建项目”,选择“.NET Maui App(预览版)”
  2. 为项目命名,然后单击“创建”。
  3. 打开文件 Platforms/Android/MainActivity.cs

一旦打开此文件,就会显示 15 个错误,开头是“无法找到类型或命名空间名称‘Android’”。尽管项目将成功构建,但这些错误永远不会消失。当构建期间发生真正的错误时,这使得继续变得非常困难。

我尝试过清理该项目,但没有成功。

.net c# android visual-studio maui

9
推荐指数
0
解决办法
3797
查看次数

.NET Maui MVVM Picker 绑定 SelectedIndexChanged 事件

我正在使用 MVVM 开发一个带有 .NET Maui 的 Windows 桌面应用程序。

我有 2 个Pickers带有ImageSourceSelectedIndex绑定到视图模型中的属性。当从第一个项目中选择一个项目时, Picker需要更改另一个项目中的项目。我想将SelectedIndexChanged事件绑定到视图模型中的方法来完成此操作。

选择器中事件的 XAMLPicker如下所示:

<Picker SelectedIndexChanged="{Binding OnSelectedIndexChanged}" />
Run Code Online (Sandbox Code Playgroud)

视图模型中的方法如下所示:

public void OnSelectedIndexChanged(object sender, EventArgs e)
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

但运行程序时出现以下错误:

XFC0009 找不到“SelectedIndexChanged”的属性、BindableProperty 或事件,或者值和属性之间的类型不匹配。毛伊岛App1

我的临时解决方案是在事件触发时从后面的代码中调用 viewmodel 方法。背后的代码如下所示:

private void Picker_SelectedIndexChanged(object sender, EventArgs e)
{
    (BindingContext as MainViewModel).OnSelectedIndexChanged(sender, e);
}
Run Code Online (Sandbox Code Playgroud)

我想让后面的代码尽可能简单。有没有办法SelectedIndexChanged通过直接绑定到视图模型中的方法来处理事件?

更新尝试实施partial void On<PropertyName>Changed()

我的视图模型:

public partial class MainViewModel : ObservableObject
{
    [ObservableProperty]
    private ObservableCollection<ProductGroupRoot> …
Run Code Online (Sandbox Code Playgroud)

c# data-binding xaml mvvm maui

9
推荐指数
1
解决办法
7851
查看次数

.Net Maui MVVM - 在页面/视图打开时填充 CollectionView 的最佳方法是什么?

我是 .Net Maui 的新手,但已完成 James Montemagno 的 4 小时研讨会。研讨会包括:

  1. 使用 CollectionView 创建页面
  2. 创建视图模型
  3. 创建调用数据服务来检索数据的异步方法
  4. 将异步方法配置为 ICommand
  5. 将数据模型列表绑定到 CollectionView
  6. 将命令绑定到按钮

单击该按钮即可工作并填充 CollectionView。当页面打开时,我将如何删除按钮并执行此操作?注意我尝试通过删除“[ICommand]”来修改该方法,但这不起作用。另外,这个操作应该在代码隐藏中还是在 ViewModel 中完成?

预先感谢您的帮助!

(模型视图)

public partial class FieldAssignedWbsViewModel : BaseViewModel

{
FieldAssignedWbsService fieldAssignedWbsService;
public ObservableCollection<FieldAssignedWbs> WbsList { get; set; } = new();

public FieldAssignedWbsViewModel(FieldAssignedWbsService fieldAssignedWbsService)
{
    Title = "Wbs Assigned";
    this.fieldAssignedWbsService = fieldAssignedWbsService;
}

[ICommand]
async Task GetFieldAssignedWbsListAsync()
{
    if (IsBusy)
        return;
    try
    {
        IsBusy = true;

        var wbsList = await fieldAssignedWbsService.GetFieldAssignedWbsList();

        if (WbsList.Count != 0)
            WbsList.Clear();

        foreach (var …
Run Code Online (Sandbox Code Playgroud)

xaml xamarin.forms maui

9
推荐指数
2
解决办法
8868
查看次数

为什么 Microsoft 同时拥有 Avalonia UI 和 .NET MAUI?

.Net Conf 目前正在进行中,我了解到了名为 Avalonia UI 的东西。(我使用 .NET MAUI)经过一些研究,Avalonia UI 主要是一个桌面 UI 框架,现在支持 Android 和 iOS。

既然它们都是 dotNet 基础项目,为什么它们要开发两个不同的多平台框架?由于它们都使用 XAML 和 C# 代码,因此两者相比是否有明显的优势?

.net c# avaloniaui maui

9
推荐指数
1
解决办法
5702
查看次数

如何在.NET MAUI 中创建可重用组件?

我最近刚刚开始使用 .Net MAUI。但现在我想知道如何使用一段代码,例如我所有页面上的自制导航栏,因为在所有10个页面上编写相同的代码没有意义。我想知道是否有一种方法可以创建一个可以像 React 或 Angular 一样重用的组件?

PS:这个问题并非特定于导航栏,而是特定于 .NET MAUI 中代码的一般重用。

到目前为止,我已经观看了有关该主题的各种视频和文章,但是,它更多的是关于自定义控件的,并且对我没有帮助。大多数文章与该视频中传达的内容相对应。我也看到了这篇文章,但它对我也没有帮助。

感谢您的帮助 :)

components dry maui

9
推荐指数
1
解决办法
4760
查看次数

毛伊岛;无法从代码中的资源访问颜色

我正在尝试从我的毛伊应用程序中的颜色文件(在样式下)访问颜色:

<Color x:Key="LiteGreen">#7DD2CD</Color>
    <Color x:Key="VeryLiteGreen">#a4dbda</Color>
    <Color x:Key="LiteBlue">#c3e1ed</Color>
Run Code Online (Sandbox Code Playgroud)

如果我想访问 xaml 中的颜色,这就是我的做法以及对我有用的方法:

BorderColor="{StaticResource LiteGreen}"
Run Code Online (Sandbox Code Playgroud)

现在我尝试在代码中访问相同的颜色:

var color = this.Resources["LiteGreen"] as Color;
Run Code Online (Sandbox Code Playgroud)

失败并显示“LiteGreen 不在资源字典内”

在此输入图像描述

我尝试了许多不同的变化,但没有成功。

编辑:

我的 app.xaml(基本)。

<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:Skillbased"
             x:Class="Skillbased.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Styles/Colors.xaml" />
                <ResourceDictionary Source="Resources/Styles/Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>
Run Code Online (Sandbox Code Playgroud)

maui

9
推荐指数
1
解决办法
4620
查看次数

如何为 .NET 7 Maui (Android) 配置 GitLab CI/CD

我有点震惊 Linux 不支持构建 .NET MAUI 应用程序,除非它们是

android                    .NET SDK Workload for building Android applications.
macos                      .NET SDK Workload for building macOS applications.  
maui-android               .NET MAUI SDK for Android                           
maui-tizen                 .NET MAUI SDK for Tizen                             
maui-windows               .NET MAUI SDK for Windows                           
runtimes-windows           Windows Runtime Packs                               
runtimes-windows-net6      Windows Runtime Packs                               
wasm-experimental          .NET WebAssembly experimental tooling               
wasm-tools                 .NET WebAssembly build tools                        
wasm-tools-net6            .NET WebAssembly build tools for net6.0  
Run Code Online (Sandbox Code Playgroud)

无论如何,我想知道 .NET Maui 开发人员如何在 GitLab 中实现 CI/CD 自动化。 是否有像 GitHub 或 Azure Pipelines 中那样的内置机制?还是必须手动配置?我可以看一个例子吗?

这是我到目前为止一直在尝试的, …

docker gitlab-ci .net-core maui

9
推荐指数
1
解决办法
2607
查看次数