Как мне сослаться на StaticResource XAML, который генерируется во время выполнения из базы данных? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть ряд перечисляемых списков, которые я веду как ряд таблиц базы данных, которые я хочу отобразить в ComboBoxes в XAML. При запуске приложения я создаю их как StaticResources примерно так:

            string[] enum_list = 
            {
                // Anything in this list maps to a database table name that starts with "enum_"
                "systemmode",
                [...]
            };

        var dictionary = new ResourceDictionary();
        foreach (string enumstring in enum_list)
        {
            string query = String.Format("SELECT `key` AS A, value AS B FROM enum_{0} ORDER BY A", enumstring);
            Dictionary<int, string> enumDict = db.Database.SqlQuery<QueryResultIntKey>(query)
                                            .ToDictionary(r => r.A, r => r.B);
            dictionary.Add(key: "enum_"+enumstring, value: enumDict);
        }

        this.Resources = dictionary;

Я ссылаюсь на это в комбинированном ящике с данными, используя следующее:

            <ComboBox x:Name="cmb_SystemMode"
                  Grid.Row="3"
                  Grid.Column="1"
                  ItemsSource="{StaticResource enum_systemmode}"
                  DisplayMemberPath="Value"
                  SelectedValuePath="Key"
                  SelectedValue="{Binding Rset.Recipe.SystemMode, Mode=TwoWay, Converter={StaticResource longconverter}}" />

Строка, помеченная ItemsSource ..., появляется в конструкторе с синим волнистым контуром. Я понимаю почему, потому что я генерирую эти StaticResources и помещаю их в ResourceDictionary во время выполнения.

Я могу запустить это, все разрешается, и это вполне устраивает во время выполнения.

Этот ComboBox содержится в UserControl. Помимо волнистой синевы и некоторых жалоб на невозможность разрешения, дизайнер позволит мне открыть UserControl.

Однако, когда я открываю MainWindow, которое включает в себя UserControl, синтаксический анализатор XAML выбрасывает аппроксимацию и отказывается загружать UserControl, потому что он не может разрешить имя StaticResource.

Есть ли какой-нибудь способ, которым я могу динамически генерировать списки комбинированных полей при запуске, используя запросы db, без разбора парсера XAML в Designer? Я попытался заменить StaticResource на DynamicResource в ссылке на XAML, но это не решило проблему.

...