我有一个标准菜单,其中的标题绑定到一个viewmodel中的列表,并且我想绑定来自另一个viewmodel的命令。我希望这能够改变应用程序中的语言。我这样定义的菜单:如何将两个不同的属性绑定到两个不同的数据上下文WPF C#
<Menu DockPanel.Dock="Top" DataContext="{Binding MenuViewModel, Mode=OneWay, Source={StaticResource mainViewModel}}">
其中MenuViewModel包含所有的命令,并呼吁LanguageViewModel另一视图模型包含了所有的报头。然后我要每个菜单项定义是这样的:
<MenuItem Command="{Binding Path=NewProjectCommand}">
<MenuItem.Header>
<Label DataContext="{StaticResource languageViewModel}" Content="{Binding Path=Names[menu.project.addnode]}" />
</MenuItem.Header>
</MenuItem>
这意味着只是一个菜单项至少5行代码,菜单可能含有超过30周的MenuItems ... 有没有简单的方法来做到这一点?我在想模板,但不知道我会怎么做。
什么是'menu.project.addnode '?如果您以这种方式进行本地化,我认为使用带有特定于语言环境的资源的'DynamicResource'可能会更容易。但是如果你在这种方法中有一些时间,另一种选择可能是有一个全局静态languageviewmodel实例,只需将一个n x:Static关键字传递给一个ValueConverter,它将从languageviewmodel返回适当的值。或者更容易,给每一个常规的viewmodel一个静态languageviewmodel的引用,这样你就可以使用相同的DataContext。 –
您可以使附加行为为“MenuItem”设置标题。在xaml中看起来像这样:''。 – Sinatr
我对每种语言都使用了所有字符串的文件,并且menu.peoject.addnode是其中一个键。然后我解析该文件并将所有键值对放入Dictionary中。我希望能够动态地将语言添加到应用程序中,这是我认为最好的方式。有没有实现本地化的标准方式? –
walle