我是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
答案 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>
结果:
答案 1 :(得分:0)
在ComboBox
中选择一个项目后,根据所选项目过滤要显示的元素,调用Filter
方法,并将{{1}中选择的值传递给它}}。
然后,使用:
刷新数据网格 ComboBox
。
和CollectionView:
yourDataGrid.Items.Refresh();
此外,请查看this文章,解释yourCollectionView.Refresh();
的功能。