如何将两个不同的属性绑定到两个不同的datacontexts WPF C#

时间:2016-08-05 14:03:31

标签: c# wpf mvvm menu

我有一个标准菜单,其中标题绑定到一个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 ...... 有没有更简单的方法来做到这一点?我在考虑模板,但不知道我会怎么做。

1 个答案:

答案 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" }
    };
}