绑定到嵌套词典-如何声明DictionaryEntry是馆藏/词典?

时间:2019-04-29 12:02:52

标签: wpf xaml binding resourcedictionary

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

TranslationItems1.xaml

<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会报告错误代码XLS0521,并为绑定路径声明Type 'DictionaryEntry' is not a collection.。该错误在构建时会消失,但是如果我随后对该文件进行任何更改,该错误会再次出现。

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

如何在XAML中指定Group1Group2是字典?

0 个答案:

没有答案