【问题标题】:Getting a string from a listbox item added during runtime [duplicate]从运行时添加的列表框项中获取字符串[重复]
【发布时间】:2020-03-23 06:42:51
【问题描述】:

我有一个列表框,上面有一个项目,然后它可以被从文本框中输入的文本中提取的几个项目(单词)替换。它们添加了listbox.Items.Add(word)。 我希望能够在它们被选中时将列表框中的这些单词转换回字符串(这样我就可以用它们做其他事情),但是我遇到了两个我不确定如何处理的问题:

  1. 选择原始项目时出现异常:

System.NullReferenceException: '对象引用未设置为 对象的实例。'

当使用string s = ((ListBoxItem)listbox.SelectedItem).Content.ToString();

"System.NullReferenceException: '对象引用未设置为 对象的实例。'

System.Windows.Controls.Primitives.Selector.SelectedValue.get 返回 空。”

当使用string s = listbox.SelectedValue.ToString();

  1. 当任何新项目被选中时,什么都不会发生。我认为这是因为事件处理程序仅附加到开始时列表中的单个项目,但我不确定如何将其应用于尚不存在的项目。选择列表框中的任何项目时是否有事件处理程序?

任何帮助将不胜感激,在此先感谢您。

【问题讨论】:

  • I assume this is because the event handler is only attached to the single item that's on the list in the beginning - 你在使用列表框SelectionChanged 事件吗?那么情况就不是这样了。
  • 使用它确实解决了这两个问题,谢谢!

标签: c# wpf string xaml listbox


【解决方案1】:

你可以试试这个,你可以在你的列表框中测试一个元素的选择:

 private void youListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     if(yourListBox.SelectedItem != null)
     {
        ....
     }
 }

【讨论】:

    【解决方案2】:

    您应该收听SelectionChanged 事件。见下文

            public MainWindow()
            {
                InitializeComponent();
    
                ListBox.Items.Add("Word1");
                ListBox.Items.Add("Word2");
                ListBox.Items.Add("Word3");
                ListBox.Items.Add("Word4");
    
                ListBox.SelectionChanged += ListBox_SelectionChanged;
            }
    
            private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                var listBoxValue = ListBox.SelectedValue.ToString();
                Console.WriteLine(listBoxValue);
            }
    

    【讨论】:

    • 更简单。 SelectionChangedEventArgs 存储了很多属性,让你不需要调用列表框引用。
    • 我只能选择一个答案,而另一个包含不涉及选择的代码(事实证明我也需要),但是这个答案也很有帮助,谢谢!跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    相关资源
    最近更新 更多