如何通过方法绑定标签的可见性

时间:2019-02-18 06:25:07

标签: c# mvvm xamarin.forms

我有几个标签。我需要多次设置可见性为真或假。以防万一,我的代码正在复制如何使用mvvm克服这个问题

                userlabel.IsVisible = false;
                passwordlabel.IsVisible = false;
                userlabel1.IsVisible = true;
                passwordlabel1.IsVisible = true;

在我的代码中,该代码多次重复执行。我需要将其放入我的视图模型CS中的方法中

1 个答案:

答案 0 :(得分:0)

我认为您可以在ViewModel类中设置属性的值并将其绑定到视图。在示例中,为清楚起见,我使用的是一个基本ViewModel,它将引发NotifyPropertyChanged事件。

 public class MainViewModel : ViewModelBase
    {

        private bool _isUserLabelVisible = false;

        public bool IsUserLabelVisible
        {
            get
            {
                return _isUserLabelVisible;
            }

            set
            {
                Set(ref _isUserLabelVisible, value);
            }
        }


        private bool _isPasswordVisible = true;

        public bool IsPasswordLabelVisible
        {
            get
            {
                return _isPasswordVisible;
            }

            set
            {
                Set(ref _isPasswordVisible, value);
            }
        }

        private void DisableAll()
        {
            IsPasswordLabelVisible = false;
            IsUserLabelVisible = false;
        }

        private void EnableAll()
        {
            IsUserLabelVisible = true;
            IsPasswordLabelVisible = true;
        }
    }

这样,您可以创建您的方法,并且视图将被更新。 在您的视图中,您将需要使用BooleanToVisibilityConverter。

<Window x:Class="StackOverflow54741515.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:ignore="http://www.galasoft.ch/ignore"
        mc:Ignorable="d ignore"
        Height="300"
        Width="300"
        Title="MVVM Light Application"
        DataContext="{Binding Main, Source={StaticResource Locator}}">

    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="BoolToVis"/>
    </Window.Resources>

    <Grid x:Name="LayoutRoot">
        <TextBlock Name="userLabel" FontSize="36"
                   FontWeight="Bold"
                   Foreground="Purple"
                   Text="Username"
                   VerticalAlignment="Center"
                   HorizontalAlignment="Center"
                   TextWrapping="Wrap"
                   Visibility="{Binding IsUserLabelVisible, Converter={StaticResource BoolToVis}}"/>

        <TextBlock Name="passwordLabel" FontSize="36"
                   FontWeight="Bold"
                   Foreground="Purple"
                   Text="Password"
                   VerticalAlignment="Center"
                   HorizontalAlignment="Center"
                   TextWrapping="Wrap"
                   Visibility="{Binding IsPasswordLabelVisible, Converter={StaticResource BoolToVis}}"/>

    </Grid>
</Window>

希望对您有所帮助。