按下按钮将从另一个 XAML 页面创建文本标签;使用 .NET MAUI

问题描述 投票:0回答:1

我找不到解决方案,当您按 Home.xaml 文件上的“加号”按钮时, 它将创建一个带有 2 个文本标签的 StackLayout (与 Cart.xaml 文件中名为“Texts1”文本的 StackLayout 相同) 并且它应该在名为“AddHere”的特定 StackLayout 内创建

(注:我使用的是 Visual Studio 2022、.NET MAUI)

Home.xaml代码:


                    <Button Text="+" 
                            BackgroundColor="Green"
                            TextColor="White"
                            FontSize="Large"
                            HorizontalOptions="EndAndExpand"
                            VerticalOptions="Center"
                            Margin="-10,0"
                            Clicked="Increased1"/>

Cart.xaml代码:

<StackLayout x:Name="AddHere">
                        <StackLayout Orientation="Horizontal"
                                     IsVisible="False" x:Name="Texts1">

                            <Label Text="[FOOD NAME]"
                               HorizontalOptions="Start"
                               FontSize="Large"
                               TextColor="Black">
                        </Label>

                        <Label Text="[AMOUNT]"
                               HorizontalOptions="EndAndExpand"
                               VerticalOptions="CenterAndExpand"
                               FontSize="Small"
                               TextColor="Green">
                        </Label>
                        
                        </StackLayout>
</StackLayout>

我尝试过使用消息中心/接收器,但意识到它们已经过时了。

我也尝试过使用 ViewModel,但老实说我不知道如何让它与之配合使用。

我期望发生什么:基本上,当我按下按钮时,它将创建一个堆栈布局,其中有 2 个文本标签,位于堆栈布局内部。

c# xaml maui visual-studio-2022 app.xaml
1个回答
0
投票

我尝试过使用消息中心/接收器,但意识到那些 已经过时了。

从官方文档发布订阅消息可以发现:

MessagingCenter
已在
.NET 7
中弃用并替换为
WeakReferenceMessenger
CommunityToolkit.Mvvm NuGet 包裹。有关更多信息,请参阅Messenger

因此,您可以使用

CommunityToolkit.Mvvm
中的 WeakReferenceMessenger 来代替。

从文档Messenger中,我们可以知道您可以使用以下代码发送和接收消息:

 // Create a message in your app
public class MyMessage : ValueChangedMessage<string>
{
    public MyMessage(string value): base(value)
    {        
    }
}

// Register a message in the Cart page
WeakReferenceMessenger.Default.Register<MyMessage>(this, (r, m) =>
{
    // Handle the message here, with r being the recipient and m being the
    // input message. Using the recipient passed as input makes it so that
    // the lambda expression doesn't capture "this", improving performance.

      var receivedstring = m;

      // change the visible of your layout

      Texts1.IsVisible = true;
});

// Send a message from `Home` page
WeakReferenceMessenger.Default.Send(new MyMessage("test string"));
© www.soinside.com 2019 - 2024. All rights reserved.