将组合框项目绑定到字符串资源数组
Bind combobox-items to string resource array
我正在尝试将字符串资源绑定到 UWP 应用程序中的组合框。
我应该在我的应用程序资源中保留一个语言列表。
该列表有一个键(例如 "en")和一个人类可读的字符串(例如 "English")
现在我想将这些值绑定到 ComboBox 并让用户 select 语言。
我找不到执行此操作的方法
字符串资源中确实不能直接存储数组。您当然可以存储一个逗号分隔的字符串并用 string.Split
将其拆分,但这很快就会变得很丑陋。但是,您可以将数组项存储为单独的字符串资源。
我通常这样做的方式如下。
首先,创建遵循命名约定的字符串资源,例如 Language.<isocode>
:
<data name="Language.EN" xml:space="preserve">
<value>English</value>
</data>
<data name="Language.FR" xml:space="preserve">
<value>French</value>
</data>
然后你可以从语言标识符中获取这些资源,如下所示:
string name = resourceLoader.GetString("Language/" + identifier.ToUpperInvariant());
这应该允许您构建阵列。假设你有
private static readonly string[] supportedLanguages = { "EN", "FR" };
public class Language
{
string Id { get; set; }
string Name { get; set; }
}
然后您可以构建要绑定的数组,如下所示:
var languages = (from language in supportedLanguages
select new Language
{
Id = language,
Name = resourceLoader.GetString("Language/" + language)
}).ToArray();
我正在尝试将字符串资源绑定到 UWP 应用程序中的组合框。
我应该在我的应用程序资源中保留一个语言列表。
该列表有一个键(例如 "en")和一个人类可读的字符串(例如 "English")
现在我想将这些值绑定到 ComboBox 并让用户 select 语言。
我找不到执行此操作的方法
字符串资源中确实不能直接存储数组。您当然可以存储一个逗号分隔的字符串并用 string.Split
将其拆分,但这很快就会变得很丑陋。但是,您可以将数组项存储为单独的字符串资源。
我通常这样做的方式如下。
首先,创建遵循命名约定的字符串资源,例如 Language.<isocode>
:
<data name="Language.EN" xml:space="preserve">
<value>English</value>
</data>
<data name="Language.FR" xml:space="preserve">
<value>French</value>
</data>
然后你可以从语言标识符中获取这些资源,如下所示:
string name = resourceLoader.GetString("Language/" + identifier.ToUpperInvariant());
这应该允许您构建阵列。假设你有
private static readonly string[] supportedLanguages = { "EN", "FR" };
public class Language
{
string Id { get; set; }
string Name { get; set; }
}
然后您可以构建要绑定的数组,如下所示:
var languages = (from language in supportedLanguages
select new Language
{
Id = language,
Name = resourceLoader.GetString("Language/" + language)
}).ToArray();