重用用户控件时,用户控件内的FilterEventHandler不起作用

时间:2018-09-10 18:58:53

标签: wpf filter datagrid user-controls collectionviewsource

我构建了一个用户控件,该控件向每个datagrid列添加了一个过滤器。我的datgrid绑定为一个自定义类,绑定为CollectionViewSource以允许多个过滤器。 用户控件会在每个列标题上添加一个小按钮,单击该按钮时将为用户提供用于过滤该列的过滤器选项。 用户控件遍历视觉树以达到使其可重用所需的条件。我发现的问题是我无法应用来自两个不同列的过滤器,因为过滤器方法的名称相同,但是用户控件的实例不同。

这是我在用户控件中应用过滤器的方式。 propName是用户控件内的一个公共变量,用于设置用户控件绑定到的列的名称(再次遍历VisualTree以获取该名称)。因此,我然后在过滤器中使用该过滤器根据该列进行过滤,从而使我能够在用户控件中进行所有过滤。

if(filterApplied == true)
        {
            CVS_DG2.Filter -= new FilterEventHandler(CVS_DG_Filter);
            CVS_DG2.Filter += new FilterEventHandler(CVS_DG_Filter);
        }
        else
        {
            CVS_DG2.Filter += new FilterEventHandler(CVS_DG_Filter);
            filterApplied = true;
        }

这是我的用户控件中的过滤器方法

        private void CVS_DG_Filter(object sender, FilterEventArgs e)
    {
        dynamic src = e.Item;
        var propertyInfo = src.GetType().GetProperty(propname);
        var value = propertyInfo.GetValue(src, null);
        if (value.Contains(tempfilter1Value))
        {
        }
        else
        {
            e.Accepted = false;
        }
    }

当我将过滤器应用于一列时,它的效果很好。但是当我将另一个过滤器应用于另一列时,没有考虑第一个过滤器。

在测试了几件事之后,我发现如果我复制了用户控件并更改了过滤器方法的名称,则过滤将可以正常进行。即使filter方法位于用户控件的不同实例中,它的效果也一样,CollectionViewSource仍将其视为相同的过滤器。

请提供任何解释/帮助/建议/替代方案?

0 个答案:

没有答案