访问放置在ResourceDictionary内的ContentView内的Label

时间:2018-05-03 20:43:25

标签: xaml xamarin.forms resourcedictionary content-pages

我的XAML下面包含我的主XAML中的ContentView。

我想知道如何访问 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 :(得分:0)

首选方法是使用DataBindings,例如:

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

这样,您就可以无缝更新绑定到Label的{​​{1}}的值。关键是要将UI层与BL层分开,通常我们在Xamarin.Forms中使用ViewModel而不是MVVMThe official documentation很好地涵盖了这个主题,我建议另外阅读Enterprise Application Patterns using Xamarin.Forms等免费电子书。

P.S。:请注意设置固定的高度&amp; UI控件上的宽度可能会破坏不同大小屏幕上的UX体验。