Привязка к вложенному словарю - как мне указать, что DictionaryEntry - это коллекция / словарь? - PullRequest
0 голосов
/ 29 апреля 2019

Контекст для этого вопроса - обработка переводов. Я установил 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 результатов. Я предполагаю, что эта ошибка происходит из-за того, что она не знает, что Group1 и Group2 являются словарями, но я не знаю, как явно указать, что они через XAML.

Как я могу указать в XAML, что Group1 и Group2 являются словарями?

...