【问题标题】:How to connect a WPF Combobox to KeyValue-Dictionary如何将 WPF 组合框连接到 KeyValue-Dictionary
【发布时间】:2020-10-28 13:46:33
【问题描述】:

我正在努力使用 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";
    }
 }

这是我的 WPF:

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

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

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

【问题讨论】:

  • 只需将SelectedLanguage的类型改为字符串
  • 你试过SelectedValue="{Binding SelectedLanguage.Key}"吗?
  • SelectedItem="{Binding SelectedLanguage}"
  • 谢谢,@GazTheDestroyer... SelectedItem 是正确的提示。现在 Propertychanged 被触发并更新了文本框。

标签: c# wpf dictionary combobox


【解决方案1】:
ItemsSource ="{Binding Languages}"

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

DisplayMemberPath="Value"

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

SelectedValuePath="Key"

这表明,当使用SectentedValue选择项目时,我们应该与@ 987654329 Key进行比较。 (语言代码)

SelectedValue="{Binding SelectedLanguage}" />

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

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

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2011-01-30
    • 2019-07-02
    • 2013-10-04
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多