У меня есть приложение Xamarin.Forms, где я использую MVVM на странице регистрации для вставки данных в базу данных. Проблема в том, что каждый раз, когда я пытаюсь это сделать, я получаю нулевые значения из представления, хотя привязка между View и ViewModel все в порядке. Снимок экрана со значениями после запуска SignUpCommand .
Просмотр:
<?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:l="clr-namespace:projectese.viewmodels"
x:Class="everyday.Views.SignUpPage">
<ContentPage.BindingContext>
<l:SignUpViewModel/>
</ContentPage.BindingContext>
<ContentPage.Content>
<StackLayout Margin="20,0" BackgroundColor="Black" IsVisible="True">
<Label Text="Welcome!" TextColor="White" HorizontalTextAlignment="Center" />
<StackLayout BackgroundColor="White">
<Entry Placeholder="Name" Text="{Binding Name,Mode=TwoWay}" x:Name="UserName" />
<Entry Placeholder="Email" Text="{Binding Email,Mode=TwoWay}" x:Name="email" />
<Entry Placeholder="Phone" Text="{Binding Phone,Mode=TwoWay}" x:Name="phone" />
<Entry Placeholder="Password" Text="{Binding Password,Mode=TwoWay}" x:Name="pwd" />
<Entry Placeholder="Confirm Password" Text="{Binding ConfPassword,Mode=TwoWay}" x:Name="confPwd" />
<Button Text="Sign Up" Command="{Binding SignUpCommand}"/>
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
Модель представления:
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Input;
using projectese.models;
using Xamarin.Forms;
namespace projectese.viewmodels
{
public class SignUpViewModel:BaseViewModel
{
private Users user { get; set; }
public ICommand SignUpCommand { get; private set; }
public SignUpViewModel()
{
user = new Users();
SignUpCommand = new Command(async() => await AddUser());
}
private string name;
public string Name
{
get { return name; }
set
{
if(name!=null)
{
name = value;
NotifyPropertyChanged("Name");
}
}
}
private string email;
public string Email
{
get { return email; }
set
{
if(email!=null)
{
email = value;
NotifyPropertyChanged("Email");
}
}
}
private string password;
public string Password
{
get { return password; }
set
{
if(password!=null)
{
password = value;
NotifyPropertyChanged("Password");
}
}
}
private string confPassword;
public string ConfPassword
{
get { return confPassword; }
set
{
if(confPassword !=null)
{
confPassword = value;
NotifyPropertyChanged("ConfPassword");
}
}
}
private string phone;
public string Phone
{
get { return phone; }
set
{
if(phone!=null)
{
phone = value;
NotifyPropertyChanged("Phone");
}
}
}
public async Task AddUser()
{
bool isUserAccept = await Application.Current.MainPage.DisplayAlert("Add contact","Do you want to sign up?","OK","Cancel");
if(isUserAccept)
{
App.Database.AddUser(new Users {Name=user.Name,Email=user.Email,Password=user.Password,ConfPassword=user.ConfPassword,Phone=user.Phone});
await Application.Current.MainPage.DisplayAlert("Your data is saved","Welcome" + user.Name, "OK", "Cancel");
}
else
{
await Application.Current.MainPage.DisplayAlert("Something went wrong,please try again!","OK", "Cancel");
}
}
public void RemoveUser (int id)
{
App.Database.RemoveUser(id);
}
}
}
Модель:
using System;
using SQLite;
namespace projectese.models
{
public class Users
{
[PrimaryKey,AutoIncrement,NotNull]
public int Id { get; set; }
[NotNull]
public string Name { get; set; }
[NotNull]
public string Phone { get; set; }
[NotNull]
public string Email { get; set; }
[NotNull]
public string Password { get; set; }
[NotNull]
public string ConfPassword { get; set; }
public Users()
{
}
}
}
Кто-нибудь знает, почему это может произойти? Любая помощь будет признательна!