C#将对象添加到列表框

时间:2017-10-30 08:56:49

标签: c# wpf listbox

我需要在ListBox中显示特定字符​​串的帮助。字符串来自TextBox,当您单击“创建”按钮时,用户的名称应显示在ListBox中。我们添加了一个像这样的新用户normalUsersListbox.Items.Add(new User(TextBoxNamn.Text, TextBoxEpost.Text));构造函数为用户的名称和电子邮件提供了两个参数。但在列表框中,我们只能看到已创建用户,例如 Lab5.User 。我们如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Listbox为每个Item调用ToString() - Method。只需覆盖ToString() - 添加项目的方法。

public class User
{
    public string Name { get; set; }

    public override string ToString()
    {
         return Name;         
    }
}

答案 1 :(得分:1)

除了覆盖ToString之外,您还有一些稍微好一点的选择。例如,您可以使用DataTemplate(如果您只有一种类型的项,则可以省略DataType属性):

xmlns:yourNameSpace="clr-namespace:Lab5"
<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate DataType="{x:Type yourNameSpace:User}">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

或者只需设置DisplayMemberPath

<ListBox DisplayMemberPath="Name"/>

如果您需要在代码中跟踪用户,我还建议使用ItemsSource属性来分配用户,而不是直接将其添加到Items集合中,例如:

// Declare this somewhere permanent
ObservableCollection<User> users = new ObservableCollection<User>();

users.Add(new User { Name = "Test1" });
users.Add(new User { Name = "Test2" });
users.Add(new User { Name = "Test3" });
normalUsersListbox.ItemsSource = users;

下一步是绑定 ItemsSourceViewModel,但我认为现在可能有点太多了:)