1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| public partial class MainWindow : Window
{
private ObservableCollection<Employee> _employees;
private ListCollectionView _view;
public MainWindow()
{
InitializeComponent();
_employees = new ObservableCollection<Employee>
{
new() { Name = "Alice", Department = "Engineering", Salary = 25000 },
new() { Name = "Bob", Department = "Sales", Salary = 18000 },
new() { Name = "Carol", Department = "Engineering", Salary = 30000 },
new() { Name = "Dave", Department = "HR", Salary = 15000 },
new() { Name = "Eve", Department = "Sales", Salary = 22000 },
};
DataContext = _employees;
_view = (ListCollectionView)CollectionViewSource.GetDefaultView(_employees);
}
private void SearchBox_TextChanged(object sender, TextChangedEventArgs e)
{
var keyword = searchBox.Text?.Trim() ?? "";
_view.Filter = item => item is Employee emp
&& (string.IsNullOrEmpty(keyword)
|| emp.Name.Contains(keyword, StringComparison.OrdinalIgnoreCase)
|| emp.Department.Contains(keyword, StringComparison.OrdinalIgnoreCase));
}
private void SortByName(object sender, RoutedEventArgs e)
{
_view.SortDescriptions.Clear();
_view.SortDescriptions.Add(new SortDescription(nameof(Employee.Name), ListSortDirection.Ascending));
}
private void SortBySalary(object sender, RoutedEventArgs e)
{
_view.SortDescriptions.Clear();
_view.SortDescriptions.Add(new SortDescription(nameof(Employee.Salary), ListSortDirection.Descending));
}
private void GroupCheck_Changed(object sender, RoutedEventArgs e)
{
if (groupCheck.IsChecked == true)
_view.GroupDescriptions.Add(new PropertyGroupDescription(nameof(Employee.Department)));
else
_view.GroupDescriptions.Clear();
}
}
public class SalaryToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
=> value is decimal d ? $"{d:N0} 元/月" : value;
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
=> throw new NotSupportedException();
}
|