c# - 如何将两个不同的属性绑定(bind)到两个不同的数据上下文 WPF C#

标签 c# wpf mvvm menu

我有一个标准菜单,其中标题绑定(bind)到一个 View 模型中的列表,我想绑定(bind)来自另一个 View 模型的命令。我希望这能够更改应用程序中的语言。我这样定义菜单:

<Menu DockPanel.Dock="Top" DataContext="{Binding MenuViewModel, Mode=OneWay, Source={StaticResource mainViewModel}}">

其中 MenuViewModel 包含所有命令,另一个名为 LanguageViewModel 的 View 模型包含所有标题。然后我必须像这样定义每个 MenuItem:
            <MenuItem Command="{Binding Path=NewProjectCommand}">
                <MenuItem.Header>
                    <Label DataContext="{StaticResource languageViewModel}" Content="{Binding Path=Names[menu.project.addnode]}" />
                </MenuItem.Header>
            </MenuItem>

这意味着一个菜单项至少需要 5 行代码,并且菜单可能包含超过 30 个菜单项......
有没有更简单的方法来做到这一点?我在考虑模板,但不知道我会怎么做。

最佳答案

如果 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" }
    };
}

关于c# - 如何将两个不同的属性绑定(bind)到两个不同的数据上下文 WPF C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38791184/

相关文章:

c# - 如何将字符串名称日期转换为 DateTimeFormat Mysql c#?

所选行的WPF DataGrid RowStyle不改变背景和前景色

c# - 通知集合中某项的属性更改

windows-phone-8 - 内存中 View 和 View 模型的多个实例

wpf - 支持MVVM的WPF对接库

c# - MVVM light Messenger 中的 Action 、局部变量和垃圾收集的奇怪行为

c# - WPF TextBox MaxLength——有没有办法将其绑定(bind)到绑定(bind)字段上的数据验证最大长度?

c# - 使用 Pomelo EF net-core 3.0 创建迁移时出错,数据库 : MySql

c# - 如何将快门速度值转换为可用数据?

C# WPF ListView动态个性化每一行的字体大小