我有一个MenuItem
,它使用一个CultureInfo
列表作为itemsource。
我想要的是当选中一个CultureInfo
时触发一个函数,该函数用于将应用程序本地化为所选的CultureInfo。
我可以肯定该函数按照预期工作。
经过调研和尝试几个示例,这就是我最终得出的结果,但不幸的是它并没有起作用:
<MenuItem Header="{lex:LocText MenuLanguages}" ItemsSource="{Binding LanguageList}" DisplayMemberPath="Name">
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Command" Value="{Binding SetLanguage}" />
<Setter Property="MenuItem.CommandParameter" Value="{Binding}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
命令:
private ICommand _SetLanguage;
public ICommand SetLanguage
{
get
{
if (_SetLanguage == null)
_SetLanguage = new RelayCommand(ChangeLanguage);
return _SetLanguage;
}
}
public void ChangeLanguage(object langChosen)
{
LocalizeDictionary.Instance.Culture = CultureInfo.GetCultureInfo(langChosen.ToString());
}
CultureInfo.GetCultureInfo()
接受一个字符串作为参数。
itemsource 基本上是一个 ObservableCollection<CultureInfo>
。
我的问题是上面的代码有什么问题?我尝试了很多“解决方案”,但没有真正有效...
当我从列表中选择一个项目时,什么都不会发生。
*我还尝试在 ChangeLanguage
方法上设置断点,这让我得出结论,该方法甚至从未触发。
使用 caliburn.micro
和 WPFLocalizationExtension
扩展。