Запись FindByName всегда становится нулевой в xamarin формах mvvm - PullRequest
0 голосов
/ 08 января 2019

у меня есть кнопка и я хочу сфокусировать запись на нажатии кнопки поэтому моя команда кнопки:

public Command FocusPassword
        {
            get
            {
                return new Command(() =>
                {
                    Entry myEntry= Application.Current.MainPage.FindByName<Entry>("pEntry");
                    passwordEntry.Focus();
                });
            }
        }

myEntry всегда возвращает ноль, так как это решить?

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Вы также можете попробовать использовать мое демо. enter image description here

MainPage.xaml (Не забудьте BindingContext)

<?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:local="clr-namespace:EntryDemo"
         x:Class="EntryDemo.MainPage">

<StackLayout>

    <Grid Margin="10">
     <Grid.BindingContext>
            <local:BindingViewModel/>
     </Grid.BindingContext>

     <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
     </Grid.RowDefinitions>
     <Entry 
        Grid.Row="0"
        HorizontalOptions="CenterAndExpand"
        Text="account"
        x:Name="accountEntry"
         />
    <Entry 
        Text="password"
        Grid.Row="1"
        HorizontalOptions="CenterAndExpand"
        x:Name="pEntry"
     />
    <Button
        Grid.Row="2"
        HorizontalOptions="CenterAndExpand"
        x:Name="MyButton"
        Text="FocusEntry "
        Command="{Binding FocusCommand}"
        />
    </Grid>
</StackLayout>

</ContentPage>

Вы должны запустить FindByName в методе execute BindingViewModel.cs

 public class BindingViewModel: BindableObject
{
    public BindingViewModel()
    {

        FocusCommand = new Command(
            execute: () =>
            {
                Entry accountEntry = Application.Current.MainPage.FindByName<Entry>("accountEntry");
                Entry myEntry = Application.Current.MainPage.FindByName<Entry>("pEntry");
                accountEntry.Focus();

            }
     );

    }
    public ICommand FocusCommand { private set; get; }
}
0 голосов
/ 09 января 2019

Я просто решаю это:

Page currentPage = Navigation.NavigationStack.LastOrDefault();
                    Entry passwordEntry = currentPage.FindByName<Entry>("PassEntry");
                    passwordEntry.Focus();
0 голосов
/ 08 января 2019

Это myEntry, что является нулем, или passwordEntry? Вы присваиваете возвращаемый объект myEntry, но затем пытаетесь установить фокус на passwordEntry:

Entry myEntry= Application.Current.MainPage.FindByName<Entry>("pEntry");
passwordEntry.Focus();

И да, убедитесь, что Entry имеет x:Name, установленный на pEntry, например ::

 <Entry x:Name="pEntry" ... />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...