I have three RadioButtons with Value: System, Light and Dark. In the initialization of the ViewModel, I get the value using the GetReferenceValueOrDefault method (it returns System, Light or Dark depending on the user's preferences). In this case, "System" is returned.

But when I bind the value using this method, then the RadioButton is not activated. But, if I write the System method instead, it is activated. What could be the problem?
ViewMode code:
public class SettingsViewModel : BaseViewModel
{
private readonly ILanguageService _languageService;
private readonly ISettingsService _settingsService;
public SettingsViewModel(ILanguageService languageService, ISettingsService settingsService)
{
_languageService = languageService;
_settingsService = settingsService;
}
public override Task InitializeAsync(object parameter)
{
InterfaceLanguageList = _languageService.GetAvailableInterfaceLanguages();
int index = InterfaceLanguageList.ToList().FindIndex(x => x.TwoLetterISOLanguageName.Equals(_languageService.GetCurrentInterfaceLanguage()));
if (index != -1) SelectedInterfaceLanguage = InterfaceLanguageList[index];
TitleLanguageList = _languageService.GetAvailableTitleLanguages();
index = TitleLanguageList.ToList().FindIndex(x => x.TwoLetterISOLanguageName.Equals(_languageService.GetCurrentTitleLanguage()));
if (index != -1) SelectedTitleLanguage = TitleLanguageList[index];
// didnt work, this method returned "System" value
SelectedAppTheme = _settingsService.GetPreferencesValueOrDefault(GlobalValues.SettingsThemeKey, GlobalValues.SettingsThemeDefaultValue);
// work
//SelectedAppTheme = "System";
return base.InitializeAsync(parameter);
}
#region Variables
private ObservableCollection<Models.Language> _interfaceLanguageList;
public ObservableCollection<Models.Language> InterfaceLanguageList
{
get => _interfaceLanguageList;
set => SetProperty(ref _interfaceLanguageList, value);
}
private Models.Language _selectedInterfaceLanguage;
public Models.Language SelectedInterfaceLanguage
{
get => _selectedInterfaceLanguage;
set
{
if(value.TwoLetterISOLanguageName != _languageService.GetCurrentInterfaceLanguage()) _languageService.ChangeInterfaceLanguage(value); // optimize?
SetProperty(ref _selectedInterfaceLanguage, value);
}
}
private ObservableCollection<Models.Language> _titleLanguageList;
public ObservableCollection<Models.Language> TitleLanguageList
{
get => _titleLanguageList;
set => SetProperty(ref _titleLanguageList, value);
}
private Models.Language _selectedTitleLanguage;
public Models.Language SelectedTitleLanguage
{
get => _selectedTitleLanguage;
set
{
if (value.TwoLetterISOLanguageName != _languageService.GetCurrentInterfaceLanguage()) _languageService.ChangeTitleLanguage(value); // optimize?
SetProperty(ref _selectedTitleLanguage, value);
}
}
private object _selectedAppTheme;
public object SelectedAppTheme
{
get => _selectedAppTheme;
set => SetProperty(ref _selectedAppTheme, value);
}
#endregion Variables
#region Commands
public ICommand RadioButtonCheckedChangedCommand => new Command<object>(RadioButtonCheckedChanged);
private void RadioButtonCheckedChanged(object parameters)
{
string themeValue = (parameters as RadioButton)?.Value.ToString();
if (_settingsService.GetPreferencesValueOrDefault(GlobalValues.SettingsThemeKey, GlobalValues.SettingsThemeDefaultValue) == themeValue) return;
_settingsService.AddOrUpdatePreferencesValue(GlobalValues.SettingsThemeKey, themeValue);
AppThemeController.Set(themeValue);
}
#endregion Commands
}
Xaml code:
<Grid
ColumnDefinitions=",,*"
ColumnSpacing="10"
RadioButtonGroup.GroupName="AppThemeGroup"
RadioButtonGroup.SelectedValue="{Binding SelectedAppTheme}">
<RadioButton
x:Name="RadioButtonThemeSystem"
ControlTemplate="{StaticResource ThemeRadioTemplate}"
HorizontalOptions="Center"
Value="System">
<RadioButton.Behaviors>
<toolkit:EventToCommandBehavior
Command="{Binding RadioButtonCheckedChangedCommand}"
CommandParameter="{x:Reference RadioButtonThemeSystem}"
EventName="CheckedChanged" />
</RadioButton.Behaviors>
<RadioButton.Content>
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Image Scale="1.15" Source="outline_settings_suggest_24" />
<Label Text="System" />
</StackLayout>
</RadioButton.Content>
</RadioButton>
<RadioButton
x:Name="RadioButtonThemeLight"
Grid.Column="1"
ControlTemplate="{StaticResource ThemeRadioTemplate}"
HorizontalOptions="Center"
Value="Light">
<RadioButton.Behaviors>
<toolkit:EventToCommandBehavior
Command="{Binding RadioButtonCheckedChangedCommand}"
CommandParameter="{x:Reference RadioButtonThemeLight}"
EventName="CheckedChanged" />
</RadioButton.Behaviors>
<RadioButton.Content>
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Image Scale="1.15" Source="outline_light_mode_24" />
<Label Text="Light" />
</StackLayout>
</RadioButton.Content>
</RadioButton>
<RadioButton
x:Name="RadioButtonThemeDark"
Grid.Column="2"
ControlTemplate="{StaticResource ThemeRadioTemplate}"
HorizontalOptions="Center"
Value="Dark">
<RadioButton.Behaviors>
<toolkit:EventToCommandBehavior
Command="{Binding RadioButtonCheckedChangedCommand}"
CommandParameter="{x:Reference RadioButtonThemeDark}"
EventName="CheckedChanged" />
</RadioButton.Behaviors>
<RadioButton.Content>
<StackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Image Scale="1.15" Source="outline_dark_mode_24" />
<Label Text="Dark" />
</StackLayout>
</RadioButton.Content>
</RadioButton>
</Grid>
