如何将 WPF 组合框连接到键值字典



我正在与WPF Combobox作斗争。
我的工作是让用户选择一个条目,该条目应存储在变量中,此外,该变量可能会以编程方式更改,因此组合框应选择相应的项。

首先我的代码:

public KeyValuePair<string, string> SelectedLanguage { get; set; }   //the selected item
public Dictionary<string, string> Languages { get; set; }            //the list of combobox items
private void loadLanguages(List<string> languages)
{
Languages = new Dictionary<string, string>();
foreach(string language in languages)
{
//set initial selected item
if(language=="de_DE") SelectedLanguage = new KeyValuePair<string, string>(language, getLanguageDescription(language));
Languages.Add(language, getLanguageDescription(language));
}
}
private string getLanguageDescription(string language)
{
switch (language)
{
case "de_DE_Match":
return "Deutsch";
case "fr_FR_Match":
return "Französisch (Frankreich)";
case "nl_NL_Match":
return "Niederländisch";
case "en_EN_Match":
return "Englisch (GB)";
default:
return "unbekannt";
}
}

这是我的WPF:

<ComboBox x:Name="cbLanguages" 
ItemsSource ="{Binding Languages}" 
DisplayMemberPath="Value" 
SelectedValuePath="Key"
SelectedValue="{Binding SelectedLanguage}" />
<TextBox Text="{Binding SelectedLanguage.Value, Mode=OneWay}"/>

现在,列表按预期显示,但没有选择任何项目,在文本框内,选择语言正确显示,但如果组合框的选择发生变化,则不会更改。

那么,如何以编程方式更改所选项以及如何在文本框中显示所选项?如果我更改所选语言,这还不够吗?

ItemsSource ="{Binding Languages}"

好的,所以你有一个包含KeyValuePair集合的组合框,因为Languages是一个字典。

DisplayMemberPath="Value"

这表示为每个项目显示的文本将是KeyValuePairValue,(语言描述)

SelectedValuePath="Key"

这说明,当选择具有 选择值的项目时,我们应该与KeyValuePairKey进行比较。(语言代码)

SelectedValue="{Binding SelectedLanguage}" />

这会将选择绑定到SelectedLanguage,它应该是我们刚刚指定的语言代码(字符串)。但是,SelectedLanguage不是字符串,而是KeyValuePair。由于您的 ItemsSource 已经是 KeyValuePair 的集合,因此您根本不需要担心SelectedValuePathSelectedValue,您只需使用SelectedItem即可。

<ComboBox x:Name="cbLanguages" 
ItemsSource ="{Binding Languages}"
SelectedItem="{Binding SelectedLanguage}"
DisplayMemberPath="Value" />

相关内容

  • 没有找到相关文章

最新更新