【发布时间】:2012-10-18 18:25:59
【问题描述】:
我一直在使用绑定到列表视图的 Collection View Source 对象,而 CVS 是 Observable Collection 对象之上的视图。
我知道如何使用以下技术应用过滤器:
cvs.Filter += new FilterEventHandler(SomeFilterFunction);
当您只过滤一个函数时,这很好用。问题是当我想在已经过滤的 CVS 之上进行过滤时。如果我有另一个函数根据不同的条件过滤视图中的对象,则仅根据第二个过滤器中的条件过滤对象,第一个过滤器的结果消失。
这里有一些示例代码来解释我的问题:
cvs.Filter += new FilterEventHandler(SomeFilterFunction1);
cvs.Filter += new FilterEventHandler(SomeFilterFunction2);
public void SomeFilterFunction1(object sender, FilterEventArgs e)
{
SomeObject example = e.Item as SomeObject;
if(example.Name.Contains("A"))
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}
public void SomeFilterFunction2(object sender, FilterEventArgs e)
{
SomeObject example = e.Item as SomeObject;
if(example.Name.Contains("B"))
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}
所以在这个例子中,我只想要过滤器接受的字母 A 和 B 的“SomeObjects”。我的问题是,当使用 filterfunction2 调用 cvs+=Filter 时,只接受包含字母 B 的对象名称,而忽略带有字母 A 的对象。因此,当不应该接受包含字母 B 但不包含 A 的对象名称时.
我目前对这个问题的解决方案是创建一个“主”过滤器函数,其中包含每个过滤器函数,我通过每个过滤器运行每个对象,如果对象通过所有过滤器,则它被接受。这确实有效,但我的代码现在变得疯狂并且逻辑失控。有谁知道如何对 CVS 的最后一个过滤器的结果应用新的过滤器功能?为什么 CVS 不自动执行此操作,而不是通过每个过滤器发送每个对象,还是我没有以正确的方式考虑 CVS?
【问题讨论】:
标签: c# wpf filter observablecollection collectionviewsource