Доступ к метке, размещенной внутри ContentView внутри ResourceDictionary - PullRequest
0 голосов
/ 03 мая 2018

У меня ниже XAML, который содержит ContentView внутри моего основного XAML.

Я хочу знать, как я могу получить доступ к LabelPushNotificationPrice , чтобы изменить текст?

<?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:SyncfusionBusyIndicator="clr-namespace:Syncfusion.SfBusyIndicator.XForms;assembly=Syncfusion.SfBusyIndicator.XForms"
x:Class="ZayedAlKhair.InitiativeDetails"
xmlns:SyncfusionPopup="clr-namespace:Syncfusion.XForms.PopupLayout;assembly=Syncfusion.SfPopupLayout.XForms"
Title="زايد الخير">
<ContentPage.Resources>
    <ResourceDictionary>
        <DataTemplate x:Key="PushNotificationsViewTemplate">
            <ContentView BackgroundColor="White" x:Name="PushNotificationsContentView">
                <StackLayout Padding="15">
                    <Label HorizontalTextAlignment="End" Text="هذه الخدمة تمكنكم من إرسال تنبيهات الهواتف الذكية لجميع مشتركي تطبيق زايد الخير وهي أفضل خدمة لتصل مبادرتكم لآلاف المشتركين" HeightRequest="90" WidthRequest="100" />
                    <Label x:Name="**LabelPushNotificationPrice**" HorizontalTextAlignment="End" Text="سعر الخدمة : 499 دولار" HeightRequest="30" WidthRequest="100" />                        
                    <Label HorizontalTextAlignment="End" Text="مدة الترويج : مرة واحدة لكل مبادرة" HeightRequest="30" WidthRequest="100" />
                </StackLayout>
            </ContentView>
        </DataTemplate>
        <DataTemplate x:Key="PromoteViewTemplate">
            <ContentView BackgroundColor="White" x:Name="PromoteContentView">
                <StackLayout Padding="15">
                    <Label HorizontalTextAlignment="End" Text="هذه الخدمة ستجعل مبادرتكم مميزة باللون الأحمر ودائما في أعلى القائمة ليتمكن كل مستخدمي التطبيق من التعرف عليها والتفاعل معها" HeightRequest="90" WidthRequest="100" />
                    <Label HorizontalTextAlignment="End" Text="سعر الخدمة : 99 دولار" HeightRequest="30" WidthRequest="100" />                        
                    <Label HorizontalTextAlignment="End" Text="مدة التمييز : 30 يوما" HeightRequest="30" WidthRequest="100" />
                </StackLayout>
            </ContentView>
        </DataTemplate>
    </ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<Grid Padding="10" x:Name="GridInitiativeDetails">
<Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
    <RowDefinition Height="Auto" />
</Grid.RowDefinitions>

1 Ответ

0 голосов
/ 04 мая 2018

Предпочтительным способом является использование DataBindings , пример:

<Label HorizontalTextAlignment="End" Text="{Binding LabelPushNotificationPrice}" />

Таким образом, вы можете легко обновить значение Label, привязанное к вашему ViewModel. Суть в том, чтобы отделить слой пользовательского интерфейса от вашего слоя BL, и обычно мы используем MVVM вместо MVC в Xamarin.Forms. Официальная документация прекрасно освещает эту тему, и есть бесплатные электронные книги, такие как Шаблоны корпоративных приложений с использованием Xamarin.Forms , которые я рекомендую прочитать дополнительно.

P.S .: Обратите внимание, что установка фиксированной высоты и ширины для элементов управления пользовательского интерфейса может нарушить ваш интерфейс UX на экранах разных размеров.

...