在 Xamarin 表单中将控件与 ViewModel class 中的模型对象绑定

Bind controls with Model object in ViewModel class in Xamarin forms

我正在使用 Prism 以 Xamarin 形式学习 MVVM。我实现了使用用户模型 class 的登录功能。但是绑定不起作用。请检查代码并提出更正建议。

我不确定如何将控件的文本 属性 绑定到模型 class 对象的属性。

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; }
        }



    }

你的BindingContextLoginPageViewModel,而UserObj是VM的属性,所以你的绑定路径需要包含UserObj

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