C# WPF将项目添加到列表框,如果该项目没有';不存在

C# WPF将项目添加到列表框,如果该项目没有';不存在,c#,wpf,C#,Wpf,我正在学习WPF,遇到了以下问题: 我有一个文本框(txbAuthor)和一个列表框(lstAuthors),我想做的是,每当按下分号时,我想在lstAuthors中添加txbAuthor中的值,如果该值不存在的话。我写了这段代码,但不起作用: private void Add_Author(object sender, KeyEventArgs e) { if (e.Key == Key.P) { string Author = txbAuthor.Text.Remove(t

我正在学习WPF,遇到了以下问题: 我有一个文本框(txbAuthor)和一个列表框(lstAuthors),我想做的是,每当按下分号时,我想在lstAuthors中添加txbAuthor中的值,如果该值不存在的话。我写了这段代码,但不起作用:

private void Add_Author(object sender, KeyEventArgs e)
{
   if (e.Key == Key.P)
   {
   string Author = txbAuthor.Text.Remove(txbAuthor.Text.Length - 1);
   ListBoxItem itm = new ListBoxItem();
   itm.Content = Author;
   if (! lstAuthors.Items.Contains(itm))
   {
      lstAuthors.Items.Add(itm);
   }
      txbAuthor.Text = "";
  }
}
在这段代码中,我还想知道如何在“键”选项中找到分号而不是“p”,所以我想知道如何在“p”选项中检查分号而不是“p”。

表达式

lstAuthors.Items.Contains(itm)
对于新创建的
itm
对象,将始终返回
false
。但这并不重要,因为你的整个方法都是错误的


在WPF应用程序中,您通常会实现MVVM模式,并将ListBox的
ItemsSource
属性绑定到视图模型类中的字符串集合属性

但是,作为第一步,您可以简单地在MainWindow类中声明一个
ObservableCollection
成员,并在其构造函数中直接将其分配给ItemsSource属性:

private readonly ObservableCollection<string> authors
    = new ObservableCollection<string>();

public MainWindow()
{
    InitializeComponent();
    lstAuthors.ItemsSource = authors;
}

如果((发件人作为文本框)。Text[(发件人作为文本框)。Text.Length]==';')在keydown事件中不起作用,则可以在Textbox\u TextChanged事件中使用此行来检查Simiclon!
var author = txbAuthor.Text.TrimEnd(' ', ';');

if (!authors.Contains(author))
{
    authors.Add(author);
}