Xamarin.Forms, как из формы входов отправить объект в ViewModel? - PullRequest
0 голосов
/ 24 марта 2020

Здравствуйте, ребята, я создаю приложение xamarin.forms и у меня есть форма ввода с двумя полями: Имя и Фамилия, которые взяты из объекта Пользователь:

Код в xml

<StackLayout Orientation="Vertical" >                     
        <Entry Placeholder="Name" MaxLength="30"  Text="{Binding Name}" WidthRequest="220"> </Entry>                                                                            
        <Entry Placeholder="Surname" Text="{Binding Surname}" WidthRequest="220"></Entry>
        <Button Command={Binding SaveUserCommand }> Save user </Button>
 </StackLayout>                       

В ViewModel я определил:

public Command SaveUserCommand { get; set; }  
public User user;
public User User
{
  get { return user; }
  set
  {
      if (user != value)
      {
          user = value;

          SetProperty(ref user, value);
          OnPropertyChanged("User");

      }
  }
} 
public SaveUserViewModel()
{

  SaveUserCommand = new Command(execute: async () => await ExecuteUserCommand());

}
async Task ExecuteUserCommand()
{

  try
  {

      User = await DataStore.Saveuser(User); 
  }
  catch (Exception ex)
  {
      Debug.WriteLine(ex);
  }

}

Я хочу отправить как объект, но не работает? Я не хочу отправлять как отдельные строки Имя и Фамилия, я хочу отправлять их как объект Пользователь? Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 24 марта 2020

Вам необходимо использовать модель с реализацией INotifyPropertyChanged.

Примерно так: -

public class UserModel : BaseViewModel
    {
        private string _name = string.Empty;
        public string Name
        {
            get => _name;
            set => SetProperty(ref _name, value);
        }

        private string _surname = string.Empty;
        public string Surname
        {
            get => _surname;
            set => SetProperty(ref _surname, value);
        }
    }

А затем обновить ваш xaml, как показано ниже: -

<StackLayout Orientation="Vertical" >                     
        <Entry Placeholder="Name" MaxLength="30"  Text="{Binding User.Name, Mode=TwoWay}" WidthRequest="220"> </Entry>                                                                            
        <Entry Placeholder="Surname" Text="{Binding User.Surname, Mode=TwoWay}" WidthRequest="220"></Entry>
        <Button Command={Binding SaveUserCommand }> Save user </Button>
 </StackLayout>
...