我有一个标准菜单,其中标题绑定到一个viewmodel中的列表,我想从另一个viewmodel绑定命令。我希望这能够在应用程序中更改语言。我定义了这样的菜单:
<Menu DockPanel.Dock="Top" DataContext="{Binding MenuViewModel, Mode=OneWay, Source={StaticResource mainViewModel}}">
其中MenuViewModel包含所有命令,另一个名为LanguageViewModel的视图模型包含所有标题。然后我必须像这样定义每个MenuItem:
<MenuItem Command="{Binding Path=NewProjectCommand}">
<MenuItem.Header>
<Label DataContext="{StaticResource languageViewModel}" Content="{Binding Path=Names[menu.project.addnode]}" />
</MenuItem.Header>
</MenuItem>
这意味着至少5行代码只适用于一个MenuItem,菜单可能包含30多个MenuItems ...... 有没有更简单的方法来做到这一点?我在考虑模板,但不知道我会怎么做。
答案 0 :(得分:1)
如果menu.project.addnode
是字符串键,则以下内容适用于我:
<MenuItem
Command="{Binding NewProjectCommand}"
Header="{Binding Names[menu.project.addnode], Source={StaticResource languageViewModel}"
/>
这是我用于本地化字符串的快速测试VM:
public class LanguageViewModel
{
public Dictionary<string, string> Names { get; } = new Dictionary<string, string>
{
{ "menu.project.addnode", "Add New Node" }
};
}