我找不到解决方案,当您按 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 个文本标签,位于堆栈布局内部。
我尝试过使用消息中心/接收器,但意识到那些 已经过时了。
从官方文档发布订阅消息可以发现:
已在MessagingCenter
中弃用并替换为.NET 7
在 CommunityToolkit.Mvvm NuGet 包裹。有关更多信息,请参阅Messenger。WeakReferenceMessenger
因此,您可以使用
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"));