如何只过滤一个与另一个数据网格具有相同Itemssource的数据网格?

时间:2015-01-22 18:18:13

标签: c# wpf xaml datagrid

第一个datagrid绑定到我的MainViewModel类的ObservableCollection。我要过滤的第二个数据网格绑定如下:

        ICollectionView icv;
        icv = CollectionViewSource.GetDefaultView(list1);
        icv.Filter = FilterTable;
        dataGrid1.ItemsSource = icv;

list1与第一个datagrid的ObservableCollection相同。使用此代码,我的两个数据网格都被过滤了。有没有办法只过滤第二个数据网格,但不能先过滤?

1 个答案:

答案 0 :(得分:0)

您可以使用两个不同的视图并完成此过滤器。参考下面的代码。

 <StackPanel>
    <DataGrid ItemsSource="{Binding PersonsViews}" AutoGenerateColumns="False" >            
        <DataGrid.Columns>
            <DataGridTextColumn Header="Age" Binding="{Binding Age}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>                
        </DataGrid.Columns>
    </DataGrid>
    <DataGrid ItemsSource="{Binding PersonsFileterViews}" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTextColumn Header="Age" Binding="{Binding Age}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
        </DataGrid.Columns>
    </DataGrid>       
</StackPanel>
class MainViewModel
{
    private ObservableCollection<Person> perList = new ObservableCollection<Person>();

    public ObservableCollection<Person> PersonList 
    {
        get { return perList; }
        set { perList = value; }
    }
    public ICollectionView PersonsViews { get; set; }
    public ICollectionView PersonsFileterViews { get; set; }

    public MainViewModel()
    {
        perList.Add(new Person() { Age = 1, Name = "Test1"});
        perList.Add(new Person() { Age = 2, Name = "Test2" });
        perList.Add(new Person() { Age = 3, Name = "Test3" });
        perList.Add(new Person() { Age = 4, Name = "Test4" });

        PersonsViews = new CollectionViewSource { Source = PersonList }.View;
        PersonsFileterViews = new CollectionViewSource { Source = PersonList }.View;
        PersonsFileterViews.Filter = new Predicate<object>(x => ((Person)x).Age > 2);            
    }     

}


public class Person
{
    private int age;

    public int Age
    {
        get { return age; }
        set { age = value; }
    }

    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new MainViewModel();
    }


}