Связать элементы управления с объектом Model в классе ViewModel в формах Xamarin - PullRequest
0 голосов
/ 21 сентября 2019

Я изучаю MVVM в формах Xamarin, используя Prism.Я реализовал функциональность входа в систему, которая использует класс модели User.Но привязки не работают.Пожалуйста, просмотрите код и предложите исправления.

Я не уверен, как связать свойство text элемента управления со свойствами объекта класса Model.

LoginPage.xaml

   <?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:prism="http://prismlibrary.com"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="LeaveTracker.Views.LoginPage"
             Title="{Binding Title}">

    <StackLayout Orientation="Vertical" BindingContext="{Binding UserObj}">
        <Entry Placeholder="User ID" Text="{Binding UserID}"/>
        <Entry Placeholder="Password" Text="{Binding Password}" IsPassword="True"/>
    </StackLayout>
</ContentPage>

LoginPageViewModel.cs

 public class LoginPageViewModel : ViewModelBase
    {
        private User _user;
        private IFirebaseService _firebaseService;

        public User UserObj
        {
            get { return _user; }
            set { SetProperty(ref _user, value); }
        }

        public DelegateCommand LoginCommand { get; set; }

        public LoginPageViewModel(IFirebaseService firebaseService, INavigationService navigationService) : base(navigationService)
        {
            Title = "Log In";
            _firebaseService = firebaseService;
            LoginCommand = new DelegateCommand(Login, CanLogin);
        }

        private void Login()
        {
            var x = _firebaseService.LoginAsync(_user);
        }

        private bool CanLogin()
        {
            if (string.IsNullOrEmpty(_user.UserID) && string.IsNullOrEmpty(_user.Password))
            {
                return true;
            }

            return false;
        }

User.cs

  public class User
    {
        private string _userID;

        public string UserID
        {
            get { return _userID; }
            set { _userID = value; }
        }

        private string _password;

        public string Password
        {
            get { return _password; }
            set { _password = value; }
        }



    }

1 Ответ

1 голос
/ 21 сентября 2019

ваш BindingContext равен LoginPageViewModel, а UserObj является свойством виртуальной машины, поэтому ваш путь привязки должен включать UserObj

<Entry Placeholder="User ID" Text="{Binding UserObj.UserID}"/>
<Entry Placeholder="Password" Text="{Binding UserObj.Password}" IsPassword="True"/>
...