using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WpfApp1.model;
using System.Threading.Tasks;
using System;
using WpfApp1.model;
using WpfApp1.model;
using WpfApp1.model;
using System.IO;
using System.Runtime.Serialization.Json;
namespace WpfApp1
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void Invalidate()
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("WorkerList"));
}
public string selectedPos = "Должность";
public WorkerAge? selectedAge = null;
public string selectedSex = "Пол";
private IEnumerable _WorkerList;
public IEnumerable WorkerList
{
get
{
var res = _WorkerList;
res = res
.Where(c => (c.Pos == selectedPos || selectedPos == "Должность"))
.Where(c => (selectedAge == null || (c.Age >= selectedAge.AgeFrom && c.Age < selectedAge.AgeTo)))
.Where(c => (c.Sex == selectedSex || selectedSex == "Пол"));
if (searchFilter != "")
res = res.Where(c => c.name.IndexOf(
searchFilter,
StringComparison.OrdinalIgnoreCase) >= 0);
if (sortAsc) res = res.OrderBy(c => c.Age);
else res = res.OrderByDescending(c => c.Age);
return res;
}
set
{
_WorkerList = value;
}
}
public List WorkerPosList { get; set; }
public List WorkerAgeList { get; set; }
public List WorkerSexList { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
Globals.dataProvider = new JSONDataProvider();
WorkerList = Globals.dataProvider.getWorker();
WorkerPosList = Globals.dataProvider.getPos().ToList();
WorkerPosList.Insert(0, new WorkerPos { title = "Должность" });
WorkerAgeList = Globals.dataProvider.getAge().ToList();
WorkerSexList = Globals.dataProvider.getSex().ToList();
WorkerSexList.Insert(0, new WorkerSex { title = "Пол" });
WorkerList = Globals.dataProvider.getWorker();
}
public class JSONDataProvider : LocalDataProvider, IDataProvider
{
private List _WorkerList;
public JSONDataProvider()
{
var serializer = new DataContractJsonSerializer(typeof(Worker[]));
using (var sr = new StreamReader("./data.json"))
{
_WorkerList = ((Worker[])serializer.ReadObject(sr.BaseStream)).ToList();
}
}
public IEnumerable getWorker()
{
return _WorkerList;
}
}
private bool sortAsc = true;
private void ExitButton_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
private void PosFilterComboBox_SelectionChanged_1(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
selectedPos = (PosFilterComboBox.SelectedItem as WorkerPos).title;
Invalidate();
}
private void AgeFilterComboBox_SelectionChanged_2(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
selectedAge = (AgeFilterComboBox.SelectedItem as WorkerAge);
Invalidate();
}
private void SexFilterComboBox_SelectionChanged_3(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
selectedSex = (SexFilterComboBox.SelectedItem as WorkerSex).title;
Invalidate();
}
private string searchFilter = "";
private void SearchFilter_KeyUp(object sender, KeyEventArgs e)
{
searchFilter = SearchFilterTextBox.Text;
Invalidate();
}
private void RadioButton_Checked(object sender, RoutedEventArgs e)
{
sortAsc = (sender as RadioButton).Tag.ToString() == "1";
Invalidate();
}
}
interface IDataProvider
{
IEnumerable getWorker();
IEnumerable getPos();
IEnumerable getAge();
IEnumerable getSex();
}
public class LocalDataProvider : IDataProvider
{
public IEnumerable getPos()
{
return new WorkerPos[]
{
new WorkerPos()
{
title="Директор"
},
new WorkerPos()
{
title="Продавец"
},
new WorkerPos()
{
title="Механик"
},
new WorkerPos()
{
title="Уборщик"
},
new WorkerPos()
{
title="Стажер"
},
new WorkerPos()
{
title="Оператор"
},
};
}
public IEnumerable getAge()
{
return new WorkerAge[]
{
new WorkerAge()
{
title="Все возраста",
AgeFrom=0,
AgeTo=110
},
new WorkerAge()
{
title="Дети",
AgeFrom=1,
AgeTo=6
},
new WorkerAge()
{
title="Подростки",
AgeFrom=7,
AgeTo=21
},
new WorkerAge()
{
title="Молодые",
AgeFrom=22,
AgeTo=50
},
new WorkerAge()
{
title="Старики",
AgeFrom=51,
AgeTo=110
}
};
}
public IEnumerable getSex()
{
return new WorkerSex[]
{
new WorkerSex()
{
title="Человек"
},
new WorkerSex()
{
title="Женщина"
}
};
}
public IEnumerable getWorker()
{
return new Worker[]{
new Worker{
Sex="Человек",
name="Вася",
Age=25,
Pos="Директор"},
new Worker{
Sex="Человек",
name="Петя",
Age=45,
Pos="Продавец"},
new Worker{
Sex="Человек",
name="Степа",
Age = 30,
Pos="Механик"},
new Worker{
Sex="Человек",
name="Миша",
Age = 100,
Pos="Стажер"},
new Worker{
Sex="Женщина",
name="Лена",
Age = 12,
Pos="Оператор"}
};
}
}
}