Динамические ресурсы Ксамарина не работают - PullRequest
0 голосов
/ 18 марта 2019

Я новичок в Xamarin. Я пытаюсь понять Dynamic Resources и выхожу с очень простым проектом. Я создал 3 динамических ресурса типа String в App.xaml, вот так:

<?xml version="1.0" encoding="utf-8" ?>
<Application
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="MyMobileApp.App">
    <Application.Resources>
        <ResourceDictionary>
            <x:String x:Key="LangAbout">A</x:String>
            <x:String x:Key="LangProfile">P</x:String>
            <x:String x:Key="LangSettings">S</x:String>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Это мой MenuPageTest.xaml

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage Title="Menu"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="MyMobileApp.Views.MenuPageTest">
    <StackLayout VerticalOptions="FillAndExpand">
        <ListView x:Name="ListViewMenu" HasUnevenRows="True">
            <ListView.ItemTemplate><DataTemplate><ViewCell><Grid Padding="10">
                <Label Text="{Binding Text}" FontSize="20"/>
            </Grid></ViewCell></DataTemplate></ListView.ItemTemplate>
            <ListView.ItemsSource><x:Array Type="{x:Type TextCell}">
                <TextCell Text="{DynamicResource LangProfile}"  Detail="0"/>
                <TextCell Text="{DynamicResource LangSettings}" Detail="8"/>
                <TextCell Text="{DynamicResource LangAbout}"    Detail="9"/>
            </x:Array></ListView.ItemsSource>
        </ListView>
        <Button Text="Change Resources" Clicked="Button_Clicked"/>
    </StackLayout>
</ContentPage>

А вот мой код, MenuPageTest.xaml.cs:

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace MyMobileApp.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MenuPageTest : ContentPage
    {
        public MenuPageTest()
        {
            InitializeComponent();
        }
        private void Button_Clicked(object sender, System.EventArgs e)
        {
            Resources["LangAbout"] = "About";
            Resources["LangProfile"] = "Profile";
            Resources["LangSettings"] = "Settings";
        }
    }
}

Когда я впервые запускаю его, в списке правильно отображаются 3 элемента: «P», «S» и «A». Когда я нажимаю кнопку, я ожидаю, что 3 элемента будут обновлены до «Профиль», «Настройки» и «О программе», но ничего не изменится.

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

...