Wpf Xceed DataGrid:筛选详细信息
我有一个主/细节数据网格,我想过滤细节。 以下是我的DataGridCollectionViewSource:Wpf Xceed DataGrid:筛选详细信息,wpf,filter,datagrid,master-detail,xceed,Wpf,Filter,Datagrid,Master Detail,Xceed,我有一个主/细节数据网格,我想过滤细节。 以下是我的DataGridCollectionViewSource: <xcdg:DataGridCollectionViewSource x:Key="Features" Filter="ExampleFilter" Source="{Bindin
<xcdg:DataGridCollectionViewSource x:Key="Features"
Filter="ExampleFilter"
Source="{Binding Path=ItemUnderEdit.Features}"
AutoCreateDetailDescriptions="False"
AutoCreateItemProperties="False">
<xcdg:DataGridCollectionViewSource.DetailDescriptions>
<xcdg:PropertyDetailDescription RelationName="Settings"
AutoCreateDetailDescriptions="False"
AutoCreateItemProperties="False">
</xcdg:PropertyDetailDescription>
</xcdg:DataGridCollectionViewSource.DetailDescriptions>
</xcdg:DataGridCollectionViewSource>
正如你所看到的,我用ExampleFilter对其进行过滤,但这只过滤主文件。我设置了一个断点,它从未看到任何细节
我不能以相同的方式将过滤器添加到详细说明中。有没有办法过滤这些细节?任何帮助都将不胜感激 我今天遇到了这个问题-我有一个简单的过滤器,可以通过代码打开/关闭主部分和详细部分。对于master部分,这是一个简单的代码问题,如:
((DataGridCollectionView)grid.ItemsSource).FilterCriteriaMode = FilterCriteriaMode.None; // Off
((DataGridCollectionView)grid.ItemsSource).FilterCriteriaMode = FilterCriteriaMode.And; // On
((DataGridCollectionView)grid.ItemsSource).Refresh(); // Re-run filter.
对于细节部分,它应该像下面的代码一样简单(但不是):
事实证明,这样做将为生成的任何新细节部分启用新过滤器,但不会启用现有部分。展开主行时将生成新的详图剖面。为了解决这个问题,我需要一个简单的foreach循环,例如:
foreach (DataGridContext context in grid.GetChildContexts()) {
((DataGridCollectionViewBase)(context.Items)).FilterCriteriaMode = PetsDetailDescriptions.FilterCriteriaMode;
}
以下是我的完整(ish)代码:
public bool ShowDeleted {
set {
if ((grid.ItemsSource != null) && (grid.ItemsSource.GetType() == DataGridCollectionView));
DataGridCollectionView v = ((DataGridCollectionView)(grid.ItemsSource));
if (value) {
v.FilterCriteriaMode = FilterCriteriaMode.None;
MyDetailDescription.FilterCriteriaMode = FilterCriteriaMode.None;
}
else {
v.FilterCriteriaMode = FilterCriteriaMode.And;
MyDetailDescription.FilterCriteriaMode = FilterCriteriaMode.And;
}
foreach (DataGridContext context in grid.GetChildContexts()) {
((DataGridCollectionViewBase)(context.Items)).FilterCriteriaMode = PetsDetailDescriptions.FilterCriteriaMode;
}
v.Refresh();
}
}
}
我将它与XAML中一个简单的预定义过滤条件结合使用。即:
<g:DataGridItemProperty Name="IsDeleted"
DataType="{x:Type sys:Boolean}">
<g:DataGridItemProperty.FilterCriterion>
<g:EqualToFilterCriterion>
<sys:Boolean>False</sys:Boolean>
</g:EqualToFilterCriterion>
</g:DataGridItemProperty.FilterCriterion>
</g:DataGridItemProperty>
假的
我建议使用Xaml FilterCriterions,因为如果您确实需要Filter事件,它会变得有点混乱。对于该路线,您需要执行以下步骤:
<g:DataGridItemProperty Name="IsDeleted"
DataType="{x:Type sys:Boolean}">
<g:DataGridItemProperty.FilterCriterion>
<g:EqualToFilterCriterion>
<sys:Boolean>False</sys:Boolean>
</g:EqualToFilterCriterion>
</g:DataGridItemProperty.FilterCriterion>
</g:DataGridItemProperty>