从列表中的列表中填充组合框

本文关键字:列表 组合 填充 | 更新日期: 2023-09-27 18:19:11

我试图在。net 3.5 SP1中为自定义对象列表添加过滤器。我的对象是这样的:

public class Message {
  string Filename;
  DateTime Timestamp;
  List<ClassA> A;
  List<ClassB> B;
  // ...
}
public class ClassA {
  string Name;
  // ...
}
public class ClassB {
  string Description;
  // ...
}

我有一个ObservableCollection保存我所有的消息;每个消息有2个或更多的ClassA和0到n个ClassB。我已经设置了一个ListView来显示消息(通过CollectionViewSource排序)。

现在我想添加两个组合框到我的UI允许过滤这个ListView。当然,它们不应该包含重复的,所以我只想要不同的ClassA。姓名和类别。当前显示在ListView中的所有消息的描述。我还想让一个组合框的过滤器也适用于另一个。

ListView的过滤已经完成并且正在工作,但是我不知道如何填充组合框

从列表中的列表中填充组合框

这应该可以工作,其中Messages是您过滤的消息集合:

var distinctNames = 
    (from message in Messages
    from a in message.A
    select a.Name).Distinct();
var distinctDescriptions = 
    (from message in Messages
    from b in message.B
    select b.Description).Distinct();

如果我理解正确的话,您希望根据类型A和类型B的成员集合的属性的string值来过滤List<Messages>集合。

如果是这样,像这样的东西应该工作你:

var msgs = messagies.Select(ms=>ms).Where(ms=>ms.A.Exists(cla=>cla.Name.StartsWith("NameToSearch") && 
        ms.B.Exists(clb=>clb.Description.StartsWith("DescriptionToSearch"))));

注意,这里我把运算符放在查询和StartsWith字符串函数中。你可以用更适合你需要的函数和操作符来代替它们。

编辑:

好的一点是使它们也不区分大小写,在这种情况下使用,例如

StartsWith("DescriptionToSearch",StringComparison.InvariantCultureIgnoreCase))