首页 > 解决方案 > 绑定到嵌套字典 - 我如何声明 DictionaryEntry 是集合/字典?

问题描述

这个问题的上下文是处理翻译。我已经设置了一个ResourceDictionary包含其他ResourceDictionary实例以及不同区域的相关本地化字符串的实例,以便更轻松地对它们进行分组。不同的翻译项 XAML 文件将存储在不同的语言代码文件夹中,但是对于下面的示例,它们不是必需的。

TranslationItems1.xml

<ResourceDictionary ...>
    <ResourceDictionary x:Key="Group1">
        <sys:String x:Key="Field1">Group1Field1</sys:String>
        <sys:String x:Key="Field2">Group1Field2</sys:String>
        <sys:String x:Key="Field3">Group1Field3 out</sys:String>
    </ResourceDictionary>
    <ResourceDictionary x:Key="Group2">
        <sys:String x:Key="Field1">Group2Field1</sys:String>
        <sys:String x:Key="Field2">Group2Field2</sys:String>
        <sys:String x:Key="Field3">Group2Field3 out</sys:String>
    </ResourceDictionary>
</ResourceDictionary>

对于我想使用这些翻译的部分,我DataContext相应地设置和绑定。

UserControl1.xaml

<UserControl ...>
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary x:Key="Strings">
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="TranslationItems1.xaml" />
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </ResourceDictionary>
    </UserControl.Resources>
    <Button>
        <Button.ContextMenu>
            <ContextMenu DataContext="{DynamicResource Strings}">
                <MenuItem Header="{Binding Path=[Group1][Field1]}" />
                <MenuItem Header="{Binding Path=[Group1][Field2]}" />
                <MenuItem Header="{Binding Path=[Group1][Field3]}" />
            </ContextMenu>
        </Button.ContextMenu>
    </Button>
    <Button>
        <Button.ContextMenu>
            <ContextMenu DataContext="{DynamicResource Strings}">
                <MenuItem Header="{Binding Path=[Group2][Field1]}" />
                <MenuItem Header="{Binding Path=[Group2][Field2]}" />
                <MenuItem Header="{Binding Path=[Group2][Field3]}" />
            </ContextMenu>
        </Button.ContextMenu>
    </Button>
</UserControl>

这种方法似乎工作得很好。它构建并运行,我的字符串按预期显示。

然而,IntelliSense 抱怨错误代码XLS0521Type 'DictionaryEntry' is not a collection.绑定路径的状态。此错误在构建时消失,但如果我对文件进行任何后续更改,它将重新出现。

谷歌搜索该错误代码给了我多达 10 个结果。我假设发生此错误是因为它不知道Group1并且Group2是字典,但我不知道如何明确声明它们是通过 XAML 的。

如何在 XAML 中指定Group1并且Group2是字典?

标签: wpfxamlbindingresourcedictionary

解决方案


推荐阅读