C# WPF多个筛选器在DataGrid上不工作
我有一个绑定到LogData类型的CollectionView LogDataView的DataGrid。对于dataGrid中的每个数据,我有两个过滤器,一个用于LogType,另一个用于LogDirection。我的问题是,如果我应用方向过滤器(ex RX),那么在LogType中,过滤器也会为TX消息返回true。所以现在我看到了RX和TX消息(理想情况下,我应该只看到RX)。 我使用按钮单击应用过滤器 我经历过,但没有帮助。 请建议 XAMLC# WPF多个筛选器在DataGrid上不工作,c#,wpf,filter,collectionview,C#,Wpf,Filter,Collectionview,我有一个绑定到LogData类型的CollectionView LogDataView的DataGrid。对于dataGrid中的每个数据,我有两个过滤器,一个用于LogType,另一个用于LogDirection。我的问题是,如果我应用方向过滤器(ex RX),那么在LogType中,过滤器也会为TX消息返回true。所以现在我看到了RX和TX消息(理想情况下,我应该只看到RX)。 我使用按钮单击应用过滤器 我经历过,但没有帮助。 请建议 XAML <DataGrid Name="dgL
<DataGrid Name="dgLogdata" Margin="10" VerticalScrollBarVisibility="Visible" ItemsSource="{Binding LogDataView}"
AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="H" Binding="{Binding HData}" FontFamily="Arial"/>
<DataGridTextColumn Header="Raw" Binding="{Binding Hex}" FontFamily="Arial"/>
</DataGrid.Columns>
</DataGrid>
过滤器按其添加顺序应用。您需要同步这两个过滤器。也许使用一个变量
private bool bLogDirFilter = true;
private bool bLogLevelFilter = true;
过滤函数
private bool LogDirFilter(GUILogData m)
{
if (ELogDir == (byte)LogDirEnum.ELogDir_NONE)
{
bLogDirFilter = true;
return true;
}
else if (ELogDir == m.LogDir)
{
bLogDirFilter = true;
return true;
}
else
{
bLogDirFilter = false;
return false;
}
}
/*******LOG LEVEL FILTER*******/
bool LogLevelFiler(GUILogData m)
{
if (bLogDirFilter && (ELogLevel == (byte)LogLevelEnum.ELogLevel_NONE))
{
bLogLevelFilter = true;
return true;
}
else if (bLogDirFilter && (ELogLevel == m.LogLevel))
{
bLogLevelFilter = true;
return true;
}
else
{
bLogLevelFilter = false;
return false;
}
}
private bool bLogDirFilter = true;
private bool bLogLevelFilter = true;
private bool LogDirFilter(GUILogData m)
{
if (ELogDir == (byte)LogDirEnum.ELogDir_NONE)
{
bLogDirFilter = true;
return true;
}
else if (ELogDir == m.LogDir)
{
bLogDirFilter = true;
return true;
}
else
{
bLogDirFilter = false;
return false;
}
}
/*******LOG LEVEL FILTER*******/
bool LogLevelFiler(GUILogData m)
{
if (bLogDirFilter && (ELogLevel == (byte)LogLevelEnum.ELogLevel_NONE))
{
bLogLevelFilter = true;
return true;
}
else if (bLogDirFilter && (ELogLevel == m.LogLevel))
{
bLogLevelFilter = true;
return true;
}
else
{
bLogLevelFilter = false;
return false;
}
}