Отображение страницы с расширенной информацией

#xamarin #xamarin.forms #data-binding

#c# #xaml #xamarin #xamarin.forms #xamarin.android

Вопрос:

У меня есть следующие функциональные возможности, приведенные ниже: введите описание изображения здесь

При нажатии на сведения я хочу, чтобы текст, отображаемый в contentview, отображался на новой странице сведений, созданной с помощью push async. Как я могу отправить параметры, содержащие информацию, указанную в содержимом, например, заголовок, категорию и описание.

У меня есть распознаватель жестов касания:

 <Label.GestureRecognizers>
     <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"/>
</Label.GestureRecognizers>
 

Затем это приводит к созданию новой страницы с кодом:

 private async void TapGestureRecognizer_Tapped(object sender, EventArgs e)
    {
        await Navigation.PushAsync(new DetailsPage(user), true);
    }
 

Итак, как мне связать метки, содержащие заголовок, описание и категорию, для отображения на новой странице, которая создается при нажатии?

Вот код xaml, стоящий за ярлыками:

                         <StackLayout>
                            <StackLayout Orientation="Horizontal">
                                <BoxView Color="LightGray"
                                     WidthRequest="90"
                                     HeightRequest="90"
                                     HorizontalOptions="Center"
                                     VerticalOptions="Center"/>
                                <StackLayout Padding="0">

                                    <Label x:Name="Title" Text="Title"
                                       FontSize="22"
                                       FontFamily="Grotesk"
                                       TextColor="Black"
                                       Margin="10, -2, 0, 0"
                                       VerticalOptions="Fill" />
                                    <Label x:Name="Category" Text="Category"
                                       FontSize="16"
                                       FontFamily="Grotesk"
                                       TextColor="Gray"
                                       Margin="10, -2, 0, 0"
                                       VerticalOptions="Fill" />
                                    <Label x:Name="Desc" Text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. etc.etc"
                                       Margin="10, -4, 0, 0"
                                       FontSize="15"
                                        FontFamily="Latow"
                                       VerticalOptions="Start"
                                       MaxLines="3"/>
                                </StackLayout>
                            </StackLayout>
 

Ответ №1:

используйте Label ‘s BindingContext

 private async void TapGestureRecognizer_Tapped(object sender, EventArgs e)
{

    var label = (Label)sender;

    // you will need to cast it to the correct type
    var item = (MyClass)label.BindingContext;

    // then pass it to your page
    await Navigation.PushAsync(new DetailsPage(user,item), true);
}
 

Комментарии:

1. Спасибо вам! Как я могу затем извлечь заголовок, категорию и описание из элемента на моей странице сведений, чтобы отобразить их там? Я добавил код xaml за содержимым в моем вопросе

2. item объект должен содержать все необходимые данные, вам просто нужно установить BindingContext на вашей новой странице и использовать привязку данных в вашем XAML

3. Как мне установить BindingContext в этом случае? Кажется, я не могу заставить ее работать

4. this.BindingContext = TheParameterPassedOnTheConstructor;