如何按我在这里知道的许多字段进行排序我有一个字段UserId的多重过滤器。也就是我有3个文本框会写入UserId,在3个文本框中,会得到3个值,应该进行排序。例如:在 3 个文本框中的值如 1、4、5 应该获取所有这些 UserId 1、UserId 4、UserId 5 的数据。
在我看来,只接收一个过滤器,例如在那些 UserId 10中,需要三个过滤器。

主窗口视图模型
class MainWindowViewModel : ViewModelBase
{
public ObservableCollection<User> Users { get; set; }
public ObservableCollection<Todo> Todos { get; set; }
public ObservableCollection<Post> Posts { get; set; }
public ObservableCollection<Сomment> Сomments { get; set; }
public ObservableCollection<Album> Albums { get; set; }
public ObservableCollection<Photo> Photos { get; set; }
public CollectionView TodosView { get; private set; }
private int? filter;
public int? Fileter
{
get { return filter; }
set
{
filter = value;
Filters();
RaisePropertyChanged("Fileter");
}
}
private int? filter2;
public int? Fileter2
{
get { return filter2; }
set
{
filter2 = value;
RaisePropertyChanged("Fileter2");
}
}
private int? filter3;
public int? Fileter3
{
get { return filter3; }
set
{
filter3 = value;
RaisePropertyChanged("Fileter3");
}
}
private void Filters()
{
TodosView.Filter = (obj) =>
{
if (obj is Todo Todo)
return Fileter == Todo.UserId;
return false;
};
TodosView.Refresh();
}
public MainWindowViewModel()
{
Load();
TodosView = (CollectionView)CollectionViewSource.GetDefaultView(Todos);
}
private void Load()
{
string usersjson = GetFile("https://jsonplaceholder.typicode.com/users");
string todosjson = GetFile("https://jsonplaceholder.typicode.com/todos");
string postsjson = GetFile("https://jsonplaceholder.typicode.com/posts");
string commentsjson = GetFile("https://jsonplaceholder.typicode.com/comments");
string albumsjson = GetFile("https://jsonplaceholder.typicode.com/albums");
string photosjson = GetFile("https://jsonplaceholder.typicode.com/photos");
Users = JsonConvert.DeserializeObject<ObservableCollection<User>>(usersjson);
Todos = JsonConvert.DeserializeObject<ObservableCollection<Todo>>(todosjson);
Posts= JsonConvert.DeserializeObject<ObservableCollection<Post>>(postsjson);
Сomments= JsonConvert.DeserializeObject<ObservableCollection<Сomment>>(commentsjson);
Albums = JsonConvert.DeserializeObject<ObservableCollection<Album>>(albumsjson);
Photos = JsonConvert.DeserializeObject<ObservableCollection<Photo>>(photosjson);
}
private string GetFile(string site)
{
string responseString =string.Empty;
using (var webClient = new WebClient())
{
responseString = webClient.DownloadString(site);
}
return responseString;
}
}
主窗口
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="64*"/>
<RowDefinition Height="597*"/>
<RowDefinition Height="2*"/>
</Grid.RowDefinitions>
<GroupBox Header="Multi-filter id" Margin="5">
<StackPanel Margin="5" Orientation="Horizontal">
<TextBlock Margin="10,0,0,0" Text="Filter 1:" />
<TextBox Text="{Binding Fileter,UpdateSourceTrigger=PropertyChanged}" MinWidth="30" />
<TextBlock Margin="10,0,0,0" Text="Filter 2:" />
<TextBox Text="{Binding Fileter2,UpdateSourceTrigger=PropertyChanged}" MinWidth="30" />
<TextBlock Margin="10,0,0,0" Text="Filter 3:" />
<TextBox Text="{Binding Fileter3,UpdateSourceTrigger=PropertyChanged}" MinWidth="30" />
<Button Margin="10,0,0,0" Content="Reset" MinWidth="50"/>
</StackPanel>
</GroupBox>
<DataGrid Margin="5" Grid.Row="1" IsReadOnly="True" ItemsSource="{Binding TodosView}" />
</Grid>

每当更新属性时,调用 filter 方法并进行检查。