Как принять пользовательский ввод в xamarin? - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь принять пользовательский ввод, чтобы позволить пользователю назвать игроков в моей игре. Я читаю документацию по входу, но все, что я нахожу, относится к OnTextChanged, et c. Я хочу, чтобы пользователь мог вводить имя для игрока 1 и имя для игрока 2 и иметь соответствующие поля, установленные для любых строк, которые вводит пользователь, только когда они нажимают кнопку на странице с именем StartGame. Чего мне здесь не хватает?

xml (я знаю, что там, где я добавил запись, отсутствуют очень понятные вещи, но я не совсем понимаю, как с этим справиться)

<ContentPage.Content>
    <StackLayout Margin="20">
        <!--<Label Text="Player 1 Name" Grid.Row="0" Grid.Column="0" HorizontalTextAlignment="Center" FontSize="Medium"/>-->
        <Entry Placeholder="Enter a name for Player 1"/>

        <Entry Placeholder="Enter a name for Player 2"/>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Button Grid.Column="0" 
                Text="Start"/>
        </Grid>
    </StackLayout>
</ContentPage.Content>

код позади

namespace SampleApp.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class NameEntryPage : ContentPage
    {
        public NameEntryPage()
        {
            InitializeComponent();
        }
    }
}

ViewModel

namespace SampleApp.ViewModels
{
public class NameEntryPageViewModel : INotifyPropertyChanged
{


    public INavigation Navigation { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
    {
        var changed = PropertyChanged;
        if (changed == null)
            return;

        changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }



    public Command StartGameCommand { get; set; }


    public NameEntryPageViewModel(INavigation navigation)
    {
        this.Navigation = navigation;
        StartGameCommand = new Command(() => StartGame());

    }

    private void StartGame()
    {

        this.Navigation.PushAsync(new Views.TwoPlayerPage());
    }

}
}

Модель

namespace SampleApp.Models
{
public class Player 
{

    public int LifeTotal { get; set; }


    public string Name { get; set; }

}
}

1 Ответ

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

в вашей ViewModel, добавьте свойства для ваших игроков

Player Player1 { get; set; } = new Player();
Player Player2 { get; set; } = new Player();

, затем в своем XAML, привяжите Entry к именам игроков

<Entry Placeholder="Enter a name for Player 1" Text="{Binding Player1.Name}" />
<Entry Placeholder="Enter a name for Player 2" Text="{Binding Player2.Name}" />

, наконец, в своем коде позади обязательно установите BindingContext

NameEntryPageViewModel ViewModel {get;set;}

public NameEntryPage()
{
  InitializeComponent();
  BindingContext = ViewModel = new NameEntryPageViewModel();
}

, в качестве альтернативы вы можете назначить свойство x:Name для ваших записей, а затем просто получить пользовательский ввод, используя MyControlName.Text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...