У меня есть ряд перечисляемых списков, которые я веду как ряд таблиц базы данных, которые я хочу отобразить в 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, но это не решило проблему.