XAML, содержащий текст метки из ресурсов приложения внутри представления списка

#c# #xaml #listview #xamarin.forms

Вопрос:

Я пытаюсь заполнить текст метки внутри представления списка в XAML. Но я хочу, чтобы текст этикетки исходил из ресурсов приложения. Я уверен, что где-то забыл крошечную деталь, такую как использование или пространство имен.

Кстати, вот XAML:

 <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         x:Class="Arbeitszeitrechner_Forms.Views.WorkdayListPage"
         Style="{StaticResource PageStyle}"
         Title="{Binding Title}"
         xmlns:local="clr-namespace:Arbeitszeitrechner_Forms.ViewModels"  
         xmlns:model="clr-namespace:Arbeitszeitrechner_Forms.Models"
         xmlns:appres="clr-namespace:Arbeitszeitrechner_Forms.Resources">

<!--Titel im WorkdaysViewModel zugewiesen und im AppResources definiert-->

<RefreshView x:DataType="local:WorkdaysViewModel" Command="{Binding LoadWorkdaysCommand}" IsRefreshing="{Binding IsBusy, Mode=TwoWay}">
    <CollectionView x:Name="WorkdaysListView"
            ItemsSource="{Binding Workdays}"
            SelectionMode="None">
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <StackLayout Padding="10" x:DataType="model:WorkdayList">
                    <Label
                        LineBreakMode="NoWrap" 
                        Style="{DynamicResource ListItemTextStyle}" 
                        FontSize="16">
                        <Label.Text>
                            <MultiBinding StringFormat="{}{0} {1:d}">
                                <Binding Path="Day" />
                                <Binding Path="Date" />
                            </MultiBinding>
                        </Label.Text>
                    </Label>
                    <StackLayout Orientation="Horizontal">
                        <Label x:Name="LblTotalTime"/>    <!-- **************THIS LABEL IS THE **** THING THAT I CAN'T POPULATE****************-->
                        <Label Text="{Binding TimeTotal, StringFormat='{0:hh}:{0:mm}'}"
                        LineBreakMode="NoWrap"
                        Style="{DynamicResource ListItemTextStyle}"
                        FontSize="13" />
                    </StackLayout>
                    <StackLayout.GestureRecognizers>
                        <TapGestureRecognizer 
                            NumberOfTapsRequired="1"
                            Command="{Binding Source={RelativeSource AncestorType={x:Type local:WorkdaysViewModel}}, Path=WorkdayTapped}"       
                            CommandParameter="{Binding .}">
                        </TapGestureRecognizer>
                    </StackLayout.GestureRecognizers>
                </StackLayout>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</RefreshView>
 

и код xaml.cs, лежащий в основе:

 namespace Arbeitszeitrechner_Forms.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class WorkdayListPage : ContentPage
{
    WorkdaysViewModel _viewModel;

    public WorkdayListPage()
    {
        InitializeComponent();
        BindingContext = _viewModel = new WorkdaysViewModel();
        //Normally i would do something like this here, but for some reason i can't:
        //LblTotalTime.Text = AppResources.LblTotalTime
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        _viewModel.OnAppearing();
    }
}
}
 

Бот попросил меня предоставить более подробную информацию, чтобы компенсировать большое количество кода, который я скопировал. Поэтому, пожалуйста, не обращайте внимания на тарабарщину, которую я здесь пишу.

Ответ №1:

используйте расширение x:Static

 <Label Text="{x:Static resources:AppResources.LblTotalTime}" />
 

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

1. Вау, спасибо! Но мне также пришлось добавить путь для ключевого слова resources: xmlns:ресурсы=»clr-пространство имен:Arbeitszeitrechner_Forms. Ресурсы»