我需要在ListBox中显示特定字符串的帮助。字符串来自TextBox,当您单击“创建”按钮时,用户的名称应显示在ListBox中。我们添加了一个像这样的新用户normalUsersListbox.Items.Add(new User(TextBoxNamn.Text, TextBoxEpost.Text));
构造函数为用户的名称和电子邮件提供了两个参数。但在列表框中,我们只能看到已创建用户,例如 Lab5.User 。我们如何解决这个问题?
答案 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;
下一步是绑定 ItemsSource
到ViewModel
,但我认为现在可能有点太多了:)