У меня есть страница, единственная цель которой - заставить пользователя ввести свое отображаемое имя в поле ввода, а затем нажать кнопку, которая переместит пользователя на следующую страницу.
<Grid.RowDefinitions>
<RowDefinition Height = "0.10*"/>
<RowDefinition Height = "0.20*"/>
<RowDefinition Height = "0.15*"/>
<RowDefinition Height = "0.40*"/>
<RowDefinition Height = "*"/>
</Grid.RowDefinitions>
<Label Style = "LargeRegularLabel" Text = "Enter Your Display Name:"
Grid.Row = "1" VerticalOptions = "End" HorizontalOptions = "Start"/>
<Entry x:Name = "DisplayNameEntry" Grid.Row = "2"
Placeholder = "Enter Name Here"
Text = "{Binding DisplayName, Mode=TwoWay}" />
<Button x:Name = "BeginButton" Text = "Begin Quiz"
Grid.Row = "4"
HorizontalOptions = "Center" VerticalOptions = "Center"
Command = "{StaticResource BeginQuizButtonCommand}" CommandParameter = "{Binding Source=DisplayNameEntry, Path=Text}"/>
</Grid>
В приведенном выше XAML у меня есть это.
CommandParameter = "{Binding Source=DisplayNameEntry, Path=Text}"
Я надеялся, что это позволит мне захватить текст из поля ввода при нажатии кнопки и передать его в качестве параметра соответствующей команде, а затем в соответствующий метод в ViewModel, который определяет, является ли это допустимым именем.
Однако кажется, что он просто ничего не передает команде. Когда я помещаю точку останова в метод Execute () команды, я вижу, что значение параметра равно нулю.
Как получить этот текст из записи с помощью XAML?
@Shan Это сработало, большое спасибо.
Или вы можете просто привязать DisplayName к обоим, поскольку он уже имеет двустороннюю привязку.
Используйте ElementName вместо Source. {Binding ElementName=DisplayNameEntry, Path=Text}
@Shan, вы должны правильно ответить на вопрос своим комментарием, чтобы его можно было пометить как ответ.





Вам нужно получить ссылку на элемент, а затем выбрать свойство. Source=DisplayNameEntry будет просто искать его в BindingContext.
CommandParameter = "{Binding Source = {x:Reference DisplayNameEntry}, Path=Text}"
Как упоминал @JohnnyQ, вы также можете использовать ElementName. Предлагаю вам просмотреть этот пост на разница между ними
Вам нужно получить ссылку на элемент, а затем выбрать свойство.
Source=DisplayNameEntryбудет просто искать его в BindingContext. Ссылка может быть оформлена как -CommandParameter = "{Binding Source = {x:Reference DisplayNameEntry}, Path=Text}"