C# 如何将WPF组合框连接到KeyValue字典

C# 如何将WPF组合框连接到KeyValue字典,c#,wpf,dictionary,combobox,C#,Wpf,Dictionary,Combobox,我正在和一个WPF组合框搏斗。 我的工作是让用户选择一个条目,该条目应该存储在一个变量中,此外,该变量可以通过编程方式更改,因此组合框应该选择相应的项 首先,我的代码: public KeyValuePair<string, string> SelectedLanguage { get; set; } //the selected item public Dictionary<string, string> Languages { get; set; }

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

首先,我的代码:

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";
    }
 }
public KeyValuePair SelectedLanguage{get;set;}//选定项
公共字典语言{get;set;}//组合框项列表
专用语言(列表语言)
{
语言=新字典();
foreach(语言中的字符串语言)
{
//设置初始选定项
如果(language==“de_de”)选择了language=newkeyvaluepair(language,getLanguageDescription(language));
添加(语言,getLanguageDescription(语言));
}
}
私有字符串getLanguageDescription(字符串语言)
{
开关(语言)
{
案例“de_de_Match”:
返回“Deutsch”;
案例“fr_fr_Match”:
返回“Französisch(Frankreich)”;
案例“nl_nl_匹配”:
返回“Niederländisch”;
案例“en_en_匹配”:
返回“English(GB)”;
违约:
返回“unbekannt”;
}
}
这是我的WPF:

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

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

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

ItemsSource ="{Binding Languages}"
好的,您有一个组合框,其中包含
KeyValuePair
s的集合,因为
Languages
是一个字典

DisplayMemberPath="Value"
这表示为每个项目显示的文本将是
KeyValuePair
值(语言描述)

这意味着,当选择具有SelectedValue的项目时,我们应该与
KeyValuePair
Key
进行比较。(语文守则)

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

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


只需将SelectedLanguage的类型更改为string您是否尝试过
SelectedValue=“{Binding SelectedLanguage.Key}”
?或
SelectedItem=“{Binding SelectedLanguage}”
谢谢,@GazTheDestroyer。。。SelectedItem是正确的提示。现在Propertychanged被激发,textbox被更新。
SelectedValue="{Binding SelectedLanguage}" />
<ComboBox x:Name="cbLanguages" 
          ItemsSource ="{Binding Languages}"
          SelectedItem="{Binding SelectedLanguage}"
          DisplayMemberPath="Value" />