C# 多个筛选器在DataGrid WPF中不工作
我的数据绑定在我的DataGrid中工作正常,但是当我尝试从我的CollectionViewSource获取collectionview时,它是空的,并且我在DataGrid中的过滤器不工作。代码如下:C# 多个筛选器在DataGrid WPF中不工作,c#,data-binding,datagrid,filter,observablecollection,C#,Data Binding,Datagrid,Filter,Observablecollection,我的数据绑定在我的DataGrid中工作正常,但是当我尝试从我的CollectionViewSource获取collectionview时,它是空的,并且我在DataGrid中的过滤器不工作。代码如下: <Window.Resources> <CollectionViewSource x:Key="jobItemViewSource" d:DesignSource="{d:DesignInstance my:JobItem, CreateList=True}"/>
<Window.Resources>
<CollectionViewSource x:Key="jobItemViewSource" d:DesignSource="{d:DesignInstance my:JobItem, CreateList=True}"/>
</Window.Resources>
<Grid Visibility="Visible" ShowGridLines="False" UseLayoutRounding="True" DataContext="{StaticResource jobItemViewSource}">
<DataGrid Grid.Row="4" Grid.ColumnSpan="6" LoadingRow="jobItemDataGrid_LoadingRow" ItemsSource="{Binding}" Name="jobItemDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" IsReadOnly="True" IsSynchronizedWithCurrentItem="True" AutoGenerateColumns="False" Grid.RowSpan="2">
<DataGrid.Columns>
<DataGridTextColumn x:Name="workOrderNoColumn" Binding="{Binding Path=WorkOrderNo}" Header="Work Order No." Width="75" />
<DataGridTextColumn x:Name="assigneeColumn" Binding="{Binding Path=PrimaryAssignee}" Header="Assignee" Width="80" />
<DataGridTextColumn x:Name="dateReceivedColumn" Binding="{Binding Path=DateReceived}" Header="Date Received" Width="90" />
<DataGridTextColumn x:Name="dueDateColumn" Binding="{Binding Path=DueDate}" Header="Due Date" Width="90" />
<DataGridTextColumn x:Name="statusColumn" Binding="{Binding Path=Status}" Header="Status" Width="70" />
</DataGrid.Columns>
</DataGrid>
<CheckBox Content="Show Active Jobs" Name="actJobsCheckBox" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="AddFiltering" Unchecked="RemoveFiltering"/>
<CheckBox Content="Show Completed Jobs" Name="compJobsCheckBox" Grid.Column="3" Grid.ColumnSpan="3" Grid.Row="3" HorizontalAlignment="Center" VerticalAlignment="Center" Checked="AddFiltering" Unchecked="RemoveFiltering"/>
</Grid>
在我的代码隐藏中,我有以下内容:
public partial class AdminView : Window
{
ObservableCollection <JobItem> JobItemList = new ObservableCollection<JobItem>();
CollectionViewSource jobItemViewSource = new CollectionViewSource();
ICollectionView view;
MainWindow parent;
Employee currEmployee;
GroupFilter filterList = new GroupFilter();
public AdminView(MainWindow parent, Employee currEmployee)
{
this.parent = parent;
this.currEmployee = currEmployee;
InitializeComponent();
jobItemDataGrid.DataContext = JobItemList;
jobItemViewSource = (CollectionViewSource)(this.Resources[jobItemViewSource]);
view = CollectionViewSource.GetDefaultView(jobItemDataGrid);
}
private void AddFiltering(object sender, RoutedEventArgs args)
{
CheckBox check = sender as CheckBox;
Predicate<object> active = new Predicate<object>(ContainsActive);
Predicate<object> completed = new Predicate<object>(ContainsComp);
switch (check.Name)
{
case "actJobsCheckBox":
filterList.AddFilter(active);
if( view != null)
view.Filter = filterList.Filter;
break;
case "compJobsCheckBox":
filterList.AddFilter(completed);
if (view != null)
view.Filter = filterList.Filter;
break;
}
}
private void RemoveFiltering(object sender, RoutedEventArgs args)
{
CheckBox check = sender as CheckBox;
Predicate<object> active = new Predicate<object>(ContainsActive);
Predicate<object> completed = new Predicate<object>(ContainsComp);
switch (check.Name)
{
case "actJobsCheckBox":
filterList.RemoveFilter(active);
break;
case "compJobsCheckBox":
filterList.RemoveFilter(completed);
break;
}
}
public bool ContainsActive(object de)
{
JobItem item = de as JobItem;
return (item.Status != "Completed");
}
public bool ContainsComp(object de)
{
JobItem item = de as JobItem;
return (item.Status == "Completed");
}
公共部分类AdminView:窗口
{
ObservableCollection作业项列表=新的ObservableCollection();
CollectionViewSource jobItemViewSource=新的CollectionViewSource();
ICollectionView视图;
主窗口父窗口;
雇员;雇员;
GroupFilter filterList=新的GroupFilter();
公共AdminView(主窗口父窗口、员工当前员工)
{
this.parent=parent;
this.currenemployee=currenemployee;
初始化组件();
jobItemDataGrid.DataContext=JobItemList;
jobItemViewSource=(CollectionViewSource)(this.Resources[jobItemViewSource]);
view=CollectionViewSource.GetDefaultView(jobItemDataGrid);
}
私有void AddFiltering(对象发送方、RoutedEventArgs参数)
{
CheckBox check=发件人作为复选框;
谓词活动=新谓词(ContainsActive);
谓词完成=新谓词(ContainsComp);
开关(检查名称)
{
案例“actJobsCheckBox”:
filterList.AddFilter(活动);
如果(视图!=null)
view.Filter=filterList.Filter;
打破
案例“compJobsCheckBox”:
filterList.AddFilter(已完成);
如果(视图!=null)
view.Filter=filterList.Filter;
打破
}
}
private void RemoveFiltering(对象发送方、RoutedEventArgs参数)
{
CheckBox check=发件人作为复选框;
谓词活动=新谓词(ContainsActive);
谓词完成=新谓词(ContainsComp);
开关(检查名称)
{
案例“actJobsCheckBox”:
过滤器列表。移除过滤器(活动);
打破
案例“compJobsCheckBox”:
filterList.RemoveFilter(已完成);
打破
}
}
公共bool ContainsActive(对象de)
{
JobItem item=de作为JobItem;
返回(item.Status!=“已完成”);
}
公共bool ContainsComp(对象de)
{
JobItem item=de作为JobItem;
返回(项目状态=“已完成”);
}
我已经找到了我自己的答案,我只需要刷新我的视图就可以了