Войти MVVM / Ярлыки - PullRequest
       3

Войти MVVM / Ярлыки

0 голосов
/ 15 апреля 2020

У меня есть вопрос относительно привязки. У меня есть логин, который я сейчас решил перенести в MVVM, до сих пор у меня были ярлыки с содержимым «неправильный пароль» и тому подобное в коде, и я настраивал их видимость. Кстати, у меня есть файл RESX, и я связываю свои метки, но не знаю, как к этому подойти.

bool isPreparedToBeSubmitted = true;
            if (string.IsNullOrEmpty(UserName))
            {
                isPreparedToBeSubmitted = false;
                emailValLabel.IsVisible = true;

            }

            if (string.IsNullOrEmpty(Password))
            {
                isPreparedToBeSubmitted = false;
                 passwordEntryValLabel.IsVisible = true;
            }

Но я думаю, что это можно сделать намного приятнее, но я не уверен, как это сделать. Получу ли я Bool видимости в Model, а затем установил привязку к метке в View?

1 Ответ

0 голосов
/ 15 апреля 2020

Так как вы хотите использовать MVVM. Было бы лучше привязать текст записи к ViewModel. Не забудьте установить режим привязки как OneWayToSource .

. Вы можете проверить следующую демонстрацию. Страница содержит две записи. Кнопка отправки появится, когда пользователь одновременно введет имя пользователя и пароль.

в xaml

<StackLayout VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand">

    <Entry Placeholder="input username"  Text="{Binding UserName,Mode=OneWayToSource}" HeightRequest="40" WidthRequest="200" />
    <Entry Placeholder="input password"  Text="{Binding Password,Mode=OneWayToSource}" HeightRequest="40" WidthRequest="200" />

    <Button Text="Submit" IsVisible="{Binding IsVisible}"  Command="{Binding SubmitCommand}"  />

</StackLayout>

в ViewModel

public class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public ICommand SubmitCommand { get; set; }


    //IsVisible

    bool isVisible;
    public bool IsVisible
    {

        get
        {
            return isVisible;
        }
        set
        {
            if (isVisible != value)
            {
                isVisible = value;

                NotifyPropertyChanged("IsVisible");
            }
        }

    }
    string userName;
    public string UserName
    {

        get
        {
            return userName;
        }
        set
        {
            if (userName != value)
            {
                userName = value;
                IsSubmitVisible();
                NotifyPropertyChanged("UserName");
            }
        }

    }



    string password;
    public string Password
    {

        get
        {
            return password;
        }
        set
        {
            if (password != value)
            {
                password = value;
                IsSubmitVisible();
                NotifyPropertyChanged("Password");
            }
        }

    }

    void IsSubmitVisible()
    {
        if (!string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(Password))
        {
            IsVisible = true;
        }
        else
        {
            IsVisible = false;
        }
    }

    public MyViewModel()
    {
        SubmitCommand = new Command(()=> {


            //...

        });
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...