0

私は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すべてを含むmyにバインドする方法contact_grnames(XMLバインド)?!

private void cmbGroup_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    value = cmbGroup.SelectedValue.ToString();
    lblGroupName.Content = "Groupname: " + value;

    CollectionViewSource cvs = FindResource("TeleView") as CollectionViewSource;
}
4

2 に答える 2

0

でアイテムを選択したら、選択したアイテムComboBoxに従って、表示する要素をフィルタリングし、Filterメソッドを呼び出して、 で選択した値を渡しますComboBox

次に、データグリッドを次のように更新します。

yourDataGrid.Items.Refresh();.

および CollectionView には次のものが含まれます。

yourCollectionView.Refresh();

さらに、 の機能を説明しているこの記事をご覧くださいCollectionView

于 2012-12-27T14:40:03.700 に答える
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>

結果: ここに画像の説明を入力 ここに画像の説明を入力

于 2012-12-27T10:51:23.457 に答える