Основные сведения о том, как работает привязка данных и MVVM в формах Xamarin

ал лучший способ передать параметры ввода (имя пользователя, пароль) в модель представления Xamarin MVVM, нажав кнопку (в виде) с параметрами команды.

Ответы на вопрос(2)

https://github.com/deanilvincent/Xamarin-Forms-Simple-MVVM-Login

Если вы новичок в MVVM в формах xamarin, эта ссылка также может быть полезна для вас

Основные сведения о том, как работает привязка данных и MVVM в формах Xamarin

. Работает нормально:

1) Создайте LoginViewModel, который будет содержать ваши команды. Убедитесь, что ViewModel реализует INotifyPropertyChanged:

public class LoginViewModel:INotifyPropertyChanged
{
    private ObservableCollection<CredentialsModel> _listOfItems=new 
    ObservableCollection<CredentialsModel>();
    public ObservableCollection<CredentialsModel> ListOfItems
    {
        get { return _listOfItems; }
        set
        {
            if (_listOfItems != value)
            {
                _listOfItems = value;
                RaisePropertyChanged();
            }
        }
    }
    private string username = null;
    private string password = null;
    private string loginMessage = null;
    public string Username { get { return username; } set { username = 
    value; } }
    public string Password { get { return password; } set { password = 
    value; } }
    public string LoginMessage { get { return loginMessage; } set { 
    loginMessage = value; RaisePropertyChanged(); } }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged([CallerMemberName]string caller="")
    {
        if(PropertyChanged!=null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(caller));
        }
    }

    public ICommand LoginCommand
    {
        get;
        private set;
    }

    public LoginViewModel()
    {
        ListOfItems.Add(new CredentialsModel());
        LoginCommand = new Command((e) =>
        {
            var item = (e as CredentialsModel);
            //TODO: LOGIN TO YOUR SYSTEM
            loginMessage = string.Concat("Login successful for user: ", 
            item.Username);
        });
    }
 }

2) В разметке вашего LoginView назначьте свой ListView имя, чтобы вы могли получить доступ к LoginCommand из элемента списка

3) Свяжите свойство Command кнопки с LoginCommand в вашем LoginView. Убедитесь, что в качестве источника команд указан BindingContext, используемый ListView, который будет указывать на LoginViewModel. И свяжите CommandParameter кнопки с текущим элементом списка:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class LoginView : ContentPage
{
    public LoginView()
    {
        InitializeComponent();
        BindingContext = new LoginViewModel();
    }

}


<?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="MyApp.View.LoginView">
    <ContentPage.Content>
    <StackLayout>
        <control:MenuView />
        <ListView x:Name="LoginList" ItemsSource="{Binding ListOfItems, 
           Mode=TwoWay}" SeparatorVisibility="None">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <Entry Placeholder="Enter user name" Text="
                              {Binding Username, Mode=TwoWay}" 
                              x:Name="Username"/>
                            <Entry Placeholder="Enter password" Text="
                              {Binding Password, Mode=TwoWay}"  
                               x:Name="Password" />
                            <Button Text="Login" 
                                    Command="{Binding 
                                    Path=BindingContext.LoginCommand, 
                                    Source={x:Reference LoginList}}"
                                    CommandParameter="{Binding}">
                            </Button>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <Label Text="{Binding LoginMessage}"></Label>
     </StackLayout>
     </ContentPage.Content>
   </ContentPage>

Ваш ответ на вопрос