Путь к ресурсам (Поскольку вы ищете элегантный способ, продолжение ответа Чокнутого Али).
App.Xaml
<Application.Resources>
<x:String x:Key="milesUnit">Miles</x:String>
<x:String x:Key="kmUnit">Km</x:String>
<local:DistanceConverter x:Key="distanceConverter"/>
</Application.Resources>
App.Xaml.cs
public App()
{
InitializeComponent();
Application.Current.Resources["distanceUnit"] = Application.Current.Resources["milesUnit"];
......
}
Конвертер
public class DistanceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
string unit = Application.Current.Resources["distanceUnit"].ToString();
double distance = double.Parse(value.ToString());
if (unit == "Km")
{
return distance * 1.60934;
}
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
Page.Xaml
<StackLayout>
<Label Text="In Page 1"/>
<Label Text="{Binding Distance,Converter={StaticResource distanceConverter}}"/>
<Label Text="{DynamicResource distanceUnit}"/>
</StackLayout>
Нажатие кнопок
void Button_Clicked(System.Object sender, System.EventArgs e)
{
Application.Current.Resources["distanceUnit"] = Application.Current.Resources["milesUnit"];
}
void Button_Clicked_1(System.Object sender, System.EventArgs e)
{
Application.Current.Resources["distanceUnit"] = Application.Current.Resources["kmUnit"];
}
Если вы собираетесь поддерживать только Мили и Км, ответ Freaky Ali хорош, но если вы планируете поддерживать другие культуры, попробуйте использовать CultureInfo .