我在 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)
当我运行此代码并单击按钮时,没有任何反应。
我正在尝试 .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 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) 我正在尝试启动一个新的 .net Maui 项目。我没有向启动项目模板添加任何代码。
Microsoft Visual Studio Community 2022(64 位)预览版 17.2.0 预览版 5.0 .NET Framework 4.7.2
重现步骤:
一旦打开此文件,就会显示 15 个错误,开头是“无法找到类型或命名空间名称‘Android’”。尽管项目将成功构建,但这些错误永远不会消失。当构建期间发生真正的错误时,这使得继续变得非常困难。
我尝试过清理该项目,但没有成功。
我正在使用 MVVM 开发一个带有 .NET Maui 的 Windows 桌面应用程序。
我有 2 个Pickers带有ImageSource并SelectedIndex绑定到视图模型中的属性。当从第一个项目中选择一个项目时, 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) 我是 .Net Maui 的新手,但已完成 James Montemagno 的 4 小时研讨会。研讨会包括:
单击该按钮即可工作并填充 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) .Net Conf 目前正在进行中,我了解到了名为 Avalonia UI 的东西。(我使用 .NET MAUI)经过一些研究,Avalonia UI 主要是一个桌面 UI 框架,现在支持 Android 和 iOS。
既然它们都是 dotNet 基础项目,为什么它们要开发两个不同的多平台框架?由于它们都使用 XAML 和 C# 代码,因此两者相比是否有明显的优势?
我正在尝试从我的毛伊应用程序中的颜色文件(在样式下)访问颜色:
<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) 我有点震惊 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 中那样的内置机制?还是必须手动配置?我可以看一个例子吗?
这是我到目前为止一直在尝试的, …
maui ×10
c# ×5
.net ×3
xaml ×2
.net-core ×1
android ×1
avaloniaui ×1
components ×1
data-binding ×1
docker ×1
dry ×1
gitlab-ci ×1
mvvm ×1