如何在XAML中将Entry.Text作为按钮的CommandParameter传递?

时间:2018-10-18 13:34:40

标签: xaml xamarin data-binding xamarin.forms

我有一个页面的唯一目的是让用户在“输入”框中输入其显示名称,然后单击一个按钮,该按钮会将用户移至下一页。

            <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}"

我希望我可以在单击按钮时从“输入”框中获取文本,并将其作为参数传递给相关的Command,然后传递到ViewModel中确定其有效名称的相关方法上。

但是,似乎什么也没有传递给Command。当我在命令的Execute()方法中放置一个断点时,我可以看到该参数的值为null。

如何使用XAML从条目中获取此文本?

1 个答案:

答案 0 :(得分:1)

您需要获取对该元素的引用,然后选择属性Source=DisplayNameEntry只会在BindingContext中对其进行搜索。

CommandParameter="{Binding Source={x:Reference DisplayNameEntry}, Path=Text}"

如@JohnnyQ所述,您也可以使用ElementName。建议您浏览difference between them

上的这篇文章