WPF中的键值对组合框

13
考虑我有一个键值对集合(例如Key=MSFT,Value=MSFT Microsoft),我将其绑定到ComboBox上,并且使用DisplayMemeberPath=Value。需要完成以下内容:
  • 选择项目后,只需在组合框中显示Key,

  • 用户还可以在组合框中输入全新的值。

我无法想出同时支持这两个功能的解决方案。解决其中一个会破坏另一个。

<ComboBox IsTextSearchEnabled="True" Name="cmbBrokers" IsEditable="True" 
ItemsSource="{Binding BrokerCodes}" SelectedValuePath="Key" 
 DisplayMemberPath="Value" Text="{Binding SelectedBroker, Mode=TwoWay}">

你可以尝试使用一个单独的文本框来显示所选项目的键。将下拉列表命名并将其用作绑定元素源,路径为selecteditem。我认为您可以使用selecteditem.key来访问该键,但我不确定。 - paparazzo
如果您想查看用户输入的新内容,您必须使用新值更新您的项源(BrokerCodes)。 - blindmeis
3个回答

37

我猜你想要的是以下内容。

public class ComboBoxPairs
{
    public string _Key { get; set; }
    public string _Value { get; set; }

    public ComboBoxPairs(string _key,string _value )
    {
        _Key = _key ;
        _Value = _value ;
    }
}

然后你可以像这样使用这个类

List<ComboBoxPairs> cbp = new List<ComboBoxPairs>();

cbp.Add(new ComboBoxPairs("Microsoft", "MSFT"));
cbp.Add(new ComboBoxPairs("Apple", "AAPL"));

将其绑定到您拥有的下拉框中

cmbBrokers.DisplayMemberPath = "_Key";
cmbBrokers.SelectedValuePath = "_Value";

cmbBrokers.ItemsSource = cbp;

当您需要访问它时,只需执行以下操作

ComboBoxPairs cbp = (ComboBoxPairs)cmbBrokers.SelectedItem;

string _key = cbp._Key;
string _value = cbp._Value;

这就是你需要做的全部。


11

在亚当的例子上进一步扩展,提供更通用的解决方案。

在 xaml.cs 中创建一个可观察集合属性,并将一个集合分配给它。

ObservableCollection < KeyValuePair < string , string > > MyCollection { get; set; }

MyCollection = new ObservableCollection < KeyValuePair < string , string > > ( ) 

{
   new KeyValuePair < string , string > ("key1" ,"value1"),
   new KeyValuePair < string , string > ("key2" ,"value2")
};

在xaml文件中,将可观察的集合与您在代码后台创建的属性进行数据绑定。

<ComboBox Grid.Row="3"
          Grid.Column="1"
          ItemsSource="{Binding MyCollection}"
          DisplayMemberPath="Key" />

如果你希望显示值而不是键,可以将 DisplayMemberPath="Key" 更改为 DisplayMemberPath="Value"


-9

我认为直接使用ComboBox不是您在这种情况下应该使用的适当UI元素。问题在于,ComboBox没有设计支持键/值对,特别是如果您希望用户在绑定到键时能够添加值到字典中。例如,如果您允许他们添加一个值,他们如何添加键或选择键来更新?

我认为解决方案是有两个控件:一个用于键选择的ComboBox和一个用于值输入的文本框。在用户选择键之前,值文本框是隐藏的。一旦选择了键,让他们将其值输入到文本框中并按Enter或按钮,然后将该值设置为所选键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接