MAUI IsVisible 的问题

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

我试图在单击按钮时使用 MVVM 隐藏一些框架和标签。 IsVisible() 只是不起作用。 其他绑定元素工作正常。

视图模型

namespace LoginApp.ViewModels
{
    public partial class LoginViewModel : ObservableObject
    {
        [ObservableProperty]
        string testString;

        [ObservableProperty]
        bool passwordView;

        [ObservableProperty]
        bool loginView;

        public LoginViewModel() 
        {
            this.LoginView = true;
            this.PasswordView = false;
            this.TestString = "Before";
        }

        [RelayCommand]
        void Login()
        {
            
            LoginView = false;
            PasswordView = true;
            TestString = PasswordView.ToString();

        }
    }
}

XAML

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="LoginApp.LoginPage"
             Title="LoginPage"
             BackgroundColor="{StaticResource DarkerBackground}"
             xmlns:viewmodel="clr-namespace:LoginApp.ViewModels">
    <Grid  RowDefinitions="5*,*" ColumnDefinitions="*,*">
       [...]
                <Grid RowDefinitions="50,Auto,Auto,Auto,Auto"  RowSpacing="10" Padding="25">
                    [...]
                    <StackLayout Grid.Row="1" Spacing="10">
                        [...]
                        <Label Text="hej" HorizontalOptions="Center" TextColor="{StaticResource LighterBackground}" FontSize="20" FontAttributes="Bold" IsVisible="{Binding PasswordView}"/>
                    </StackLayout>
                    <StackLayout Grid.Row="2">
                        <Frame  Padding="0" CornerRadius="10"  BorderColor="White" HeightRequest="40">
                            <Entry BackgroundColor="White" Placeholder="Username" ClearButtonVisibility="WhileEditing"  HeightRequest="40" Text="{Binding TestString }"/>
                        </Frame>
                        <Frame  Padding="0" CornerRadius="10"  BorderColor="White" HeightRequest="40" IsVisible="{Binding PasswordView}" >
                            <Entry BackgroundColor="White" Placeholder="Password" ClearButtonVisibility="WhileEditing"  HeightRequest="40" IsPassword="True"/>
                        </Frame>
                    </StackLayout>

                    <Button Grid.Row="3" WidthRequest="100" HeightRequest="40" Text="Login" BackgroundColor="{StaticResource Background}" VerticalOptions="EndAndExpand" Command="{Binding LoginCommand}" />
                    <Label Grid.Row="4" Text="Log in as another user" TextColor="{StaticResource LighterBackground}"  TextDecorations="Underline" HorizontalOptions="Center" IsVisible="{Binding PasswordView}" VerticalOptions="EndAndExpand" />
                </Grid>
            </Frame>
        </Frame>
[...]
    </Grid>

</ContentPage>

当 debuggig 属性被更改时,但它就像 PropertyChangedEventArgs 永远不会被调用或其他东西

mvvm binding maui
1个回答
0
投票

分别绑定到

IsVisible
ObservableProperty
属性运行良好。

如果想在点击按钮后隐藏边框和标签,只需要将属性

LoginView 
PasswordView 
设置为false即可。我根据你的代码片段做了一些逻辑上的调整,你可以参考一下:

<Grid  RowDefinitions="5*,*" ColumnDefinitions="*,*"> 

      <Grid RowDefinitions="50,Auto,Auto,Auto,Auto"  RowSpacing="10" Padding="25">

            <StackLayout Grid.Row="1" Spacing="10">

                <Label Text="hej" HorizontalOptions="Center"  FontSize="20" FontAttributes="Bold" IsVisible="{Binding PasswordView}"/>
            </StackLayout>
            <StackLayout Grid.Row="2">
                <Frame  Padding="0" CornerRadius="10"  BorderColor="Black" HeightRequest="40" IsVisible="{Binding PasswordView}" >
                    <Entry BackgroundColor="White" Placeholder="Username" ClearButtonVisibility="WhileEditing"  HeightRequest="40" Text="{Binding TestString }"/>
                </Frame>
                <Frame  Padding="0" CornerRadius="10"  BorderColor="Black" HeightRequest="40" IsVisible="{Binding PasswordView}" >
                    <Entry BackgroundColor="White" Placeholder="Password" ClearButtonVisibility="WhileEditing"  HeightRequest="40" IsPassword="True"/>
                </Frame>
            </StackLayout>

            <Button Grid.Row="3" WidthRequest="100" HeightRequest="40" Text="Login"  VerticalOptions="EndAndExpand" Command="{Binding LoginCommand}" />
            <Label Grid.Row="4" Text="Log in as another user"   TextDecorations="Underline" HorizontalOptions="Center" IsVisible="{Binding LoginView}" VerticalOptions="EndAndExpand" />
       </Grid>
</Grid>


 public partial class MainViewModel : ObservableObject 
{

        [ObservableProperty]
        string testString;

        [ObservableProperty]
        bool passwordView;

        [ObservableProperty]
        bool loginView;

        public MainViewModel()
        {
            LoginView = true;
            PasswordView = true;
            TestString = "Before";
        }

        [RelayCommand]
        void Login()
        {
            LoginView = false;
            PasswordView = false;
            TestString = "After";
        }
    }

© www.soinside.com 2019 - 2024. All rights reserved.