所以我有一个MenuItem,它使用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()将字符串作为参数。
项目源基本上是一个ObservableCollection<CultureInfo>。
我的问题是,,上面的代码会有什么问题吗?,我已经尝试了很多‘解决方案’,但是没有什么真正有效.
当我从列表中选择一个项目时,什么都不会发生。
*我还试图在ChangeLanguage方法上设置一个断点,这使我得出结论,该方法甚至从不触发。
使用caliburn.micro和WPFLocalizationExtension扩展。
发布于 2013-05-17 04:58:12
如果它不起作用,那么绑定是错误的。检查调试窗口中的绑定错误。您需要使用相对资源,因为直接绑定不会做您认为会做的事情。
<MenuItem Header="_Recent files" ItemsSource="{Binding RecentFiles, Converter={StaticResource RecentFilesToListOfStringsConverter}, Mode=OneWay}" >
<MenuItem.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Command" Value="{Binding DataContext.ImportRecentItemCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}, AncestorLevel=1}}" />
<Setter Property="CommandParameter" Value="{Binding}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>发布于 2013-05-17 08:43:58
Menu的LogicalTree与Markup的其他部分不同。出于这个原因,您需要按照Erti-Chris的建议,首先搜索正确的DataContext。
而且,每个DataTemplate都有T类型的DataContext,这是绑定ItemsSource列表的一部分。
https://stackoverflow.com/questions/16601459
复制相似问题