在c#

时间:2018-10-17 19:35:23

标签: c# wpf

我正在创建一个寄存器,当您在列表框中单击某人的姓名时,该数据可以很好地工作,但是我要为其创建联系人的人要求能够搜索该列表框。我在Internet上四处浏览,但未能找到有关此主题的任何简单帮助,我对C#还是陌生的,因此非常感谢简单的解决方案

2 个答案:

答案 0 :(得分:0)

本质上,对于您需要执行的操作,您需要知道两个操作,它们彼此之间是独立的:

  1. 从WPF中的ListBox获取集合
  2. 在集合中查找项目

如何从列表框获取集合

ListBox将其项保存在集合中。我们只需要访问该集合,然后查询它以找到我们想要的项目。根据您定义ListBox项的方式,可以使用其ItemsItemsSource属性来获取包含项的集合。 ListBox上项目的类型完全取决于您填充ListBox的方式。 WPF数据模板约定和模式假定您正在使用数据类型(例如ListBox)填充MyCoolObject,因此您要完成的此类操作很容易执行。

有关更多信息,请参见ItemsControl类文档。 ListBoxItemsControl的派生类,本文档描述了在WPF中如何使用带有项目的控件。

如何在集合中查找项目

这完全取决于您存储项目的位置,但是假设您将项目存储在某个集合中,则可以使用LINQ查找项目。

例如,您可能正在使用一个名为MyCoolObject的假设自定义对象,该对象具有一个名为String的{​​{1}}属性,该属性类似于以下内容:

Text

现在,假设您在以下某处有一个收藏集:

public class MyCoolObject
{
    public string Text { get; set; }
    public DateTime Date { get; set; }
}

您可以使用像这样的LINQ查询来搜索集合中的一项:

public List<MyCoolObject> myCollection;

我上面使用的var foundObjects = myCollection.Where((myObject) => myObject.Text.Equals("Text you want to find", StringComparison.OrdinalIgnoreCase)); 方法接受一个委托,为方便起见,我将其作为lambda表达式提供。在此示例中,我使用二进制比较并忽略大小写来搜索其Where属性等于“您要查找的文本”的对象。 Text方法然后返回包含所有找到的对象的集合,该集合存储在Where变量中。

foundObjects方法将获取集合中与该文本匹配的所有项目,但是您可以简单地使用Where方法,该方法将仅返回集合中的第一个对象。

请注意,请记住,LINQ功能要求您在C#文件顶部插入以下using指令,以使它们可用:

FirstOrDefault

有关如何使用C#在集合上查找项目的更多信息,请参见此question。它有几个简单的答案,解释了在集合中找到所需内容的多种方法。 另请参见List.Find方法文档,其中描述了如何使用using System.Linq; 集合的Find方法(如果您使用List作为集合)。这不是LINQ功能。

答案 1 :(得分:0)

我将创建一个文本框来保存搜索元素,在跟踪列表框索引的同时遍历搜索该元素的列表框项目。找到时将ListBox selectedIndex设置为相关索引。

如果Linq太复杂,只需使用for或foreach循环