将标记添加到模型

时间:2016-02-01 15:56:49

标签: c# wpf combobox

我有一个TypeOfContact模型,由ID和Text组成。例如,一种类型为Telephone,ID为1。另一种类型是Email和ID 2

我想要做的是将TypeOfContact的文字添加为项目,将ID添加为标记。我想它会看起来像这样,但这不起作用;

contactTypeComboBox.Items.Clear();
foreach (TypeOfContact c in ContactTypes)
{
    contactTypeComboBox.Items.Add(c.ContactTypeText);

    foreach (ComboBoxItem item in contactTypeComboBox.Items)
    {
        item.Tag = c.ContactTypeID;
    }
}

我想这样做的原因是当有人选择我要存储文本和ID的ComboBox项之一时。我可以通过XAML执行此操作,但ContactTypes是由用户填充的列表,因此我无法将值硬编码到ComboBox中,因为维护它并添加新的TypesOfContact将是困难的。

2 个答案:

答案 0 :(得分:0)

我自己先解决了这个问题;

DisplayMemberPath="ContactTypeText" SelectedValuePath="ContactTypeID"

XAML的{​​{1}}然后访问ID,如<; p>

ComboBox

答案 1 :(得分:0)

在你的情况下,我会将你的TypeOfContacts列表作为ItemsSource绑定到ComboBox。之后您可以设置标签,但我认为您不需要它,因为当您还绑定SelectedItem时,您返回了整个项目(ID,类型,...)并且可以在其他部分使用它你的代码。

在没有ViewModel的情况下进行简化的示例(但您应该使用一个):

<强>代码隐藏

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;

        FillListWithSomeExamples();
    }

    private void FillListWithSomeExamples()
    {
        TypesOfContacts.Add(new TypesOfContact {Id = 1, Type = "Email"});
        TypesOfContacts.Add(new TypesOfContact { Id = 2, Type = "Telephone" });
    }

    public TypesOfContact SelectedTypesOfContact { get; set; }
    public ObservableCollection<TypesOfContact> TypesOfContacts { get; set; } = new ObservableCollection<TypesOfContact>();
}

TheTestmodel:

public class TypesOfContact
{
    public int Id { get; set; }
    public string Type { get; set; }
}

<强> XAML

<Grid>
    <ComboBox ItemsSource="{Binding TypesOfContacts}" SelectedItem="{Binding SelectedTypesOfContact}" DisplayMemberPath="Type"/>
</Grid>

现在,您可以通过查看SelectedTypesOfContact,在MainWindow的任何其他方法中阅读所选项目。