Не совсем уверен, что ищете здесь, так что этот ответ получает немного долго , My First Guess - вы загрузили эти два куска кода в свою IDE, и ничего не произошло, и вы хотите знать, почему. Единственный фрагмент кода, отсутствующий в этом примере, - это код, расположенный на странице XAML, которая должна быть прочитана.
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace LoginFormExample
{
public partial class LoginViewPage : ContentPage
{
public LoginViewPage()
{
InitializeComponent();
BindingContext = new LoginViewModel();
}
}
}
Другой возможный ответ, который вы могли бы искать, чтобы угробить XAML и получить все это транслируется в код, если тот случай страница будет выглядеть следующим образом:
using System;
using Xamarin.Forms;
namespace LoginFormExample
{
public class LoginViewFormInCS : ContentPage
{
public LoginViewFormInCS()
{
BindingContext = new LoginViewModel();
Entry myEntry = new Entry();
Button myButton = new Button();
myButton.SetBinding (Button.CommandProperty, new Binding ("LoginCommand", 0));
Content = new StackLayout {
Children = {
new StackLayout()
{
Children=
{
myEntry,
myButton
}
}
}
};
}
}
}
Все, что сказал, не является реальной точкой для одного из этих примеров в MVVM. Параметр команды должен использоваться для вещей, которые не являются и не должны быть частью вашей модели. Я почти никогда не использую его. Если вы не используете MVVM, тогда он вступает в игру больше. Причиной этого является Имя пользователя и любой другой элемент данных, который вид, который ViewModel может потребовать для принятия решений, должен быть привязан к чему-то в Viewmodel. Для этого примера что-то вроде
Вид:
<?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="LoginFormExample.LoginViewPage2">
<ContentPage.Content>
<StackLayout x:Name="entryForm" >
<Entry x:Name="nameEntry" Placeholder="Name" Keyboard="Default" Text="{Binding Name}"/>
<Button x:Name="loginButton"
Text="Login"
Command="{Binding LoginCommand2}"
/>
</StackLayout>
</ContentPage.Content>
</ContentPage>
ViewModel:
using System;
using Xamarin.Forms;
using System.Windows.Input;
namespace LoginFormExample
{
public class LoginViewModel2
{
public LoginViewModel2() {
LoginCommand2 = new Command<string>((string parameter) =>
{
System.Diagnostics.Debug.WriteLine(Name);
//do something with the string username
});
}
public string Name{ get; set; }
public ICommand LoginCommand2 { get; private set; }
}
}
XAML код Сзади:
using System;
using System.Collections.Generic;
using Xamarin.Forms;
namespace LoginFormExample
{
public partial class LoginViewPage : ContentPage
{
public LoginViewPage()
{
InitializeComponent();
BindingContext = new LoginViewModel();
}
}
}
Если это помогает код окончен: https://github.com/DavidStrickland0/Xamarin-Forms-Samples/tree/master/LoginSample
Спасибо за ваш ответ. Я просто использовал этот код в качестве примера, потому что он иллюстрирует мою проблему. Мой вопрос, точнее, можно связать с 'CommandParameterProperty' кнопки, которая в примере привязана как таковая в XAML: ' CommandParameter = "{Binding Source = {x: Reference nameEntry}, Path = Text} "' Как это привязка выполняется, если пользовательский интерфейс создается только в коде (а не XAML)? В частности, я хочу передать значение, введенное в 'nameEntry', в' LoginCommand'. – mrtnkrstn
Подумайте, что это уже разрешилось на форуме Xamarin. Если кто-то еще спотыкается об этом и ищет его, см.: Http://forums.xamarin.com/discussion/comment/159941#Comment_159941 – David
Действительно, это сработало, спасибо! – mrtnkrstn