使用ComboBox的WPF过滤器

时间:2012-12-27 09:38:43

标签: c# wpf combobox filter

我是WPF新手,我希望使用CollectionView控件ComboBox过滤一些数据。

到目前为止我做了什么:

<CollectionViewSource x:Key="TeleView"  Source="{StaticResource TeleData}" Filter="Filter" >
<CollectionViewSource.SortDescriptions>
    <scm:SortDescription PropertyName="contact_name" Direction="Ascending" />

</CollectionViewSource.SortDescriptions>

<CollectionViewSource.GroupDescriptions>
    <dat:PropertyGroupDescription PropertyName="contact_grname" />

</CollectionViewSource.GroupDescriptions>

CS:

private int count = 0;
void Filter(object sender, FilterEventArgs e)
{

    if (value == "" || value == null)
    {
        e.Accepted = true;
    }
    else
    {

        System.Xml.XmlElement ele = e.Item as System.Xml.XmlElement;
        string name = ele.SelectNodes("/response/contacts/contact/contact_grname")[count].InnerText;
        count += 1;
        //MessageBox.Show(name);

        if (name == "group1") e.Accepted = true;
        else e.Accepted = false;
    }
}

此代码成功过滤了group1元素中包含contact_grname文字的所有元素。

但是如何绑定到包含所有ComboBox的{​​{1}}(XML绑定)?!

contact_grnames

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你想将另一个组合框绑定到第一个组合框组中的项目。

    <XmlDataProvider x:Key="TeleData" XPath="/response/contacts/contact" Source="C:\Data.xml" />
    <CollectionViewSource x:Key="TeleView" Source="{StaticResource TeleData}" >
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="contact_name" Direction="Ascending"  />
        </CollectionViewSource.SortDescriptions>
        <CollectionViewSource.GroupDescriptions>
            <dat:PropertyGroupDescription PropertyName="contact_grname"   />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>

</Window.Resources>

<StackPanel>
    <ComboBox ItemsSource="{Binding Source={StaticResource TeleView}, Path=Groups}" DisplayMemberPath="Name" Name="comboGroups" />
    <ComboBox ItemsSource="{Binding ElementName=comboGroups, Path=SelectedItem.Items}" DisplayMemberPath="contact_name" Name="comboNames" />
</StackPanel>

结果: enter image description here enter image description here

答案 1 :(得分:0)

ComboBox中选择一个项目后,根据所选项目过滤要显示的元素,调用Filter方法,并将{{1}中选择的值传递给它}}。

然后,使用:

刷新数据网格

ComboBox

和CollectionView:

yourDataGrid.Items.Refresh();

此外,请查看this文章,解释yourCollectionView.Refresh(); 的功能。