【发布时间】: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