我有一个简单的视图模型,其中一个属性包含模型,另一个属性包含模型列表。
我可以毫无问题地绑定“Test”模型的属性,但无法让 XAML 识别“ListModel”包含具有其自己的属性的列表。我已经查看了几个示例,了解如何设置视图模型并在将列表绑定到视图之前正确初始化列表,虽然 XAML 理解“ListModel”是一个属性,但我无法让它识别出它是一个属性。列表,因此它不会编译,这样我至少可以看看它是否不是智能感知可能因某种原因而失败。
这是有问题的视图模型,其列表名为“ListModel”
public class TestViewModel
{
public TestModel Test { get; } = new TestModel();
public List<TestListModel> ListModel { get; set; }
public TestViewModel()
{
Initialize();
}
public void Initialize()
{
ListModel = new List<TestListModel>();
ListModel.Add(new TestListModel
{
ListProp1 = "First",
ListProp2 = "Second",
ListProp3 = "Third"
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是正在放入列表中的模型。视图似乎没有看到这些属性。
public class TestListModel
{
public string ListProp1 { get; set; }
public string ListProp2 { get; set; }
public string ListProp3 { get; set; …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试向使用 .NET MAUI 编写的 Android 应用程序添加深度链接支持(通过 Intents)。
我在 AndroidManifest.xml 的application元素下添加了一个活动XML 元素:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true">
<activity android:name="TestApp.MainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="test"
android:pathPrefix="/group" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
Run Code Online (Sandbox Code Playgroud)
我还在Platforms\Android 下的 MainActivity.cs 中添加了一个IntentFilter (见下文):
[IntentFilter(new[] { Intent.ActionView },
Categories = new[]
{
Intent.ActionView,
Intent.CategoryDefault,
Intent.CategoryBrowsable
},
DataScheme = "https", DataHost = "test", DataPathPrefix = "/group" …Run Code Online (Sandbox Code Playgroud) .Net 毛伊岛
我将一个对象传递给页面/视图模型,但它在构造函数中为空。我需要从中派生一些数据以传回 XAML 页面,但我不知道它何时或如何在视图模型中设置。
我相信这里使用的 [QueryProperty] 使用 MVVM Community Toolkit 在幕后发挥了一些作用
[QueryProperty("OpenJob", "OpenJob")]
public partial class NoteAvailabilityViewModel : BaseViewModel {
[ObservableProperty]
OpenJob openJob;
public List<String> jobDates;
public NoteAvailabilityViewModel(JobsService jobsService) {
if (openJob == null) {
Debug.Write("its null");
//It's always null here
//When, how is it set so I can access it in the viewmodel?
}
else {
Debug.Write("its not null");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在导航到此页面的页面中,我有一个在单击按钮时触发的 ICommand
[ICommand]
public static void NoteAvailabilityAsync(OpenJob openJob) {
Shell.Current.GoToAsync($"{nameof(NoteAvailabilityPage)}", true, new Dictionary<string, object> {
{"OpenJob", …Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中显示一些 gif 动画图像。我用来使用 Xamarin.Forms 执行此操作的库是 Xamarin.FFImageLoading.Svg.Forms。现在我们正在将应用程序迁移到 .net MAUI,我看到 MAUI 文档说它支持 GIF 文件。我尝试了一个示例,但没有成功。
我在以下链接中看到了与 gif 相关的错误和解决方法,并且我也尝试了它,但对我来说 gif 动画仍然无法正常工作。
https://github.com/dotnet/maui/issues/5034
我的代码位于公共存储库 github 上。
https://github.com/rynjas/GifMauiSample
如果您能帮助我解决这个问题,我将不胜感激。
重现该问题的步骤如下:
<Image Source="giphy.gif" HeightRequest="200" HorizontalOptions="Center" />
Run Code Online (Sandbox Code Playgroud)
<MauiImage Include="Resources\Images\*" />
<MauiImage Update="Resources\Images\*.gif" Resize="False" />
Run Code Online (Sandbox Code Playgroud)
问题仍然没有解决。
所以我有一个标签,我想从 mvvm 变量设置文本颜色。
虚拟机
[ObservableProperty]
private string col = "White";
Run Code Online (Sandbox Code Playgroud)
XAML
<Label Text="{Binding Name}"
FontSize="20"
TextColor="{Binding Col}">
Run Code Online (Sandbox Code Playgroud)
所以一般来说 TextColor="White" 效果很好
我尝试过使用 Color 对象 https://learn.microsoft.com/en-us/dotnet/maui/user-interface/graphics/colors
例如
[ObservableProperty]
private Color col = Colors.White;
Run Code Online (Sandbox Code Playgroud)
但我无法让它发挥作用。
我曾希望一个简单的字符串能够工作......哦,我徒劳的希望......
谢谢,G。
编辑:我应该补充一点,我的标签位于 CollectionView 中?
大编辑:它适用于独立标签,即
[ObservableProperty]
private Color col = Colors.White;
Run Code Online (Sandbox Code Playgroud)
所以问题是标签是否在 CollectionView 中。我想知道为什么?
编辑:因为 CollectionView 绑定到 ItemsSource - 啊,真是个假人!
我创建了一个 .net 标准类库服务,用于在我的新 Maui 应用程序中访问 sqlite 数据库。我的问题是在哪里调用初始化代码。我添加了 DI 注册,其中MauiProgram.cs将 my 注册DbService为接口的实现IDbService:
builder
.Services
.AddSingleton<IDbService>(serviceProvider =>
ActivatorUtilities.CreateInstance<DbService>(serviceProvider, databasePath))
.AddSingleton<MainViewModel>()
.AddSingleton<MainPage>();
Run Code Online (Sandbox Code Playgroud)
初始化数据库的代码(创建表、加载测试数据)我目前已放入主页视图模型的构造函数中,该视图模型注册为单例,因此初始化只会发生一次。但显然在构造函数中调用异步初始化代码是错误的。正确的位置在哪里?
Task.Run(async () =>
{
await _dbService.Initialise();
if (!(await _dbService.GetExperiences(1, 0)).Any())
await _dbService.LoadTestData();
await GetData();
}).GetAwaiter().GetResult();
Run Code Online (Sandbox Code Playgroud) 我从 dotnet maui 开始,目前文档非常差。我有一个针对旧版 Android API 级别的现有项目,并为此准备了环境。当我尝试构建它时,出现错误,
error XA5207: Could not find android.jar for API level 31. This means the Android SDK platform for API level 31 is not installed. Either install it in the Android SDK Manager (Tools > Open Android SDK Manager...), or change the Xamarin.Android project to target an API version that is installed
Run Code Online (Sandbox Code Playgroud)
我找不到更改 API 级别的选项。
编辑:我可以找到一种方法来定位较新的版本,并将其添加为答案,但超过 30 岁的绰号仍未被识别,并且我收到错误,
NETSDKZZZZ: Error getting pack version: Pack 'Microsoft.Android.Ref.30' was not present in workload manifests.
Run Code Online (Sandbox Code Playgroud) 在我的接收视图模型中,我想在异步方法 GetMovies() 中引用 [QueryParameter] 并运行它以用电影填充页面。我已将断点放置在 MovieListGenrePageViewModel 中的 GetMovies 方法处。调用时, selectedGenre 为 null,但已在 {Binding} 中返回。我缺少什么?
using System.Collections.ObjectModel;
using System.Diagnostics;
using CommunityToolkit.Mvvm.ComponentModel;
using TimesNewsApp.Models;
using TimesNewsApp.Services;
namespace TimesNewsApp.ViewModels
{
[QueryProperty(nameof(SelectedGenre), nameof(SelectedGenre))]
public partial class MovieListGenrePageViewModel : BaseViewModel
{
public ObservableCollection<Result> Movie { get;} = new();
private Genre selectedGenre;
public Genre SelectedGenre
{
get => selectedGenre;
set
{
SetProperty(ref selectedGenre, value);
}
}
NewsApiManager apiService;
public Command GetMovieComand { get; }
public MovieListGenrePageViewModel(NewsApiManager apiService)
{
this.apiService = apiService;
Task.Run(async () => await GetMovies(SelectedGenre)); …Run Code Online (Sandbox Code Playgroud) 我有一个在 Windows 机器上为 iOS 和 Android 设备构建的 MAUI 项目。那里一切正常。
当我尝试在 Visual Studio for Mac 上运行相同的代码时,它会失败,因为它找不到预处理器指令中定义的 iOS 设备代码,如下所示:
#if ANDROID
//do some Android stuff
#elif IOS
//define some properties
#endif
Run Code Online (Sandbox Code Playgroud)
它不会编译和运行,因为它说找不到“IOS”块中定义的属性。它将“ANDROID”预处理器指令块中的代码显示为活动状态。在 Windows 上,它会根据您选择的调试器输出(例如 Android 模拟器或设备、iOS 模拟器或设备)自动选择要使用的正确指令。它不会在 Mac 上执行此操作,那么有什么方法可以在 Mac 的 VS 2022 17.3 中强制执行此操作吗?
我有一个带有 blazor 的毛伊岛应用程序,我正在创建一个自定义标题栏。
我即将关闭 maui 应用程序,在 blazor 上使用Application.Current.Quit();
现在我怎样才能最小化和移动毛伊岛应用程序
我的代码 Blazor
private void MoveWindow()
{
}
private void MinimizeWindow()
{
}
private void CloseWindow() {
Application.Current.Quit();
}
Run Code Online (Sandbox Code Playgroud)