【问题标题】:How do you pass parameters in MAUI without using a ViewModel?如何在不使用 ViewModel 的情况下在 MAUI 中传递参数?
【发布时间】:2022-12-23 19:28:50
【问题描述】:

我在一页上有这个:

await Shell.Current.GoToAsync(nameof(Pages.StartPage), true, new Dictionary<string, object>
{
    { "LoginData", result }
});

result 是一个对象/类

在我的Pages.StartPage 中,我想得到那个对象。我试过使用[QueryProperty...,但总是返回空值。例如。

[QueryProperty(nameof(GetLoginData), "LoginData")]
public partial class StartPage : ContentPage

...

private JsonApiResult GetLoginData { set { _loginData = value; }  }

我刚开始使用 MAUI,我正在将应用程序从 Xamarin 转换为 MAUI。我构建的页面会自行处理,所以我不想使用 ViewModel,我只需要来自该传入对象的值,页面就可以完成它的工作。除非别无他法,否则我不想重写所有页面

任何帮助将非常感激。我看过很多关于这个的视频,但我无法让它工作,我错过了什么?

更新

我应该补充一点,让我自己的事情变得更复杂,我也在使用依赖注入(DI)

【问题讨论】:

  • 尝试制作GetLoginDatapublic。你在哪里/如何检查价值?它不会出现在构造函数中。
  • 您的 Xamarin 项目是否使用 AppShell?如果不是,并且您想在 Maui 中保留相同的行为,则不要使用 Maui 的 AppShell。在App.xaml.cs中,找到MainPage = new AppShell();。将其更改为 Xamarin 中的任何内容。底线:无论您在 Xamarin 中做什么,都应该可以在 Maui 中做类似的事情。 (自定义渲染器除外,它们已发生重大变化。)
  • 在 Xamarin 中,我做了这个 await Navigation.PushAsync(new Pages.StartPage(result), true); 在 MAUI 中,我希望利用依赖注入。我显然做错了什么,因为我可以让一个或另一个工作,但不能同时工作,哈哈。 @Jason 公开它没有用:)

标签: visual-studio-2022 maui


【解决方案1】:

这是一个例子!

主页.xaml:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MauiApp1.MainPage">

<ScrollView>
    <VerticalStackLayout
        Spacing="25"
        Padding="30,0"
        VerticalOptions="Center">
        <Button
            x:Name="CounterBtn"
            Text="Click me"
            SemanticProperties.Hint="Counts the number of times you click"
            Clicked="OnCounterClicked"
            HorizontalOptions="Center" />

    </VerticalStackLayout>
</ScrollView>

在主页 .cs 上:

public MainPage()
{
    InitializeComponent();
}

private async void OnCounterClicked(object sender, EventArgs e)
{
    List<Student> myStudentsList = new List<Student>
    {
        new Student {Name="Carlos",Course="IT",Age=18},
        new Student {Name="Juan",Course="IT",Age=19},
        new Student {Name="Leandro",Course="IT",Age=20}
    };

    await Navigation.PushAsync(new PageWithStudentsList(myStudentsList));
    
}

PageWithStudentsList.cs:

public partial class PageWithStudentsList : ContentPage
{
    public PageWithStudentsList(List<Student> students)
    {
        Console.WriteLine(students);
        InitializeComponent();
    }
}

而且您不需要使用视图模型!

编辑:如果您需要 SHELL NAVIGATION 的另一个示例,here 是他们文档中的一个 Microsoft 示例!希望能帮助到你!

【讨论】:

  • 我认为 DI 是我的问题。我变得太冒险太快了。此示例适用于 DI,但不适用于 DI。这就是我在 Xamarin 中所做的。
  • ShellNavgation 似乎只能使用 ViewModels 来完成:(
【解决方案2】:
private JsonApiResult _loginData;
public JsonApiResult LoginGetData { 
    get  => _loginData; 
    set { _loginData = value; } 
}

这似乎是解决方案,但我不明白为什么。我会再深入研究它,但现在它正在工作,所以我可以继续

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多