|
@@ -6,18 +6,125 @@ using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using DontHarmDesktop.Models;
|
|
|
using Prism.Mvvm;
|
|
|
+using System.Windows.Data;
|
|
|
+using System.ComponentModel;
|
|
|
|
|
|
namespace DontHarmDesktop.ViewModels
|
|
|
{
|
|
|
public class ClientsViewModel : BindableBase
|
|
|
{
|
|
|
- public ObservableCollection<clients> Clients { get; set; }
|
|
|
+ private CollectionViewSource clientsCollection;
|
|
|
+ private string filterName;
|
|
|
+ private bool filterShowHidden;
|
|
|
+ private int filterEmailDomain;
|
|
|
+
|
|
|
+ public ICollectionView ClientsView
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return clientsCollection.View;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public CollectionViewSource ClientsCollection
|
|
|
+ {
|
|
|
+ get { return clientsCollection; }
|
|
|
+ set { clientsCollection = value; }
|
|
|
+ }
|
|
|
+
|
|
|
+ public string FilterName
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return filterName;
|
|
|
+ }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ filterName = value;
|
|
|
+ clientsCollection.View.Refresh();
|
|
|
+ RaisePropertyChanged();
|
|
|
+ RaisePropertyChanged(nameof(ClientsView));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public bool FilterShowHidden
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return filterShowHidden;
|
|
|
+ }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ filterShowHidden = value;
|
|
|
+ clientsCollection.View.Refresh();
|
|
|
+ RaisePropertyChanged();
|
|
|
+ RaisePropertyChanged(nameof(ClientsView));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public int FilterEmailDomain
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ return filterEmailDomain;
|
|
|
+ }
|
|
|
+ set
|
|
|
+ {
|
|
|
+ filterEmailDomain = value;
|
|
|
+ clientsCollection.View.Refresh();
|
|
|
+ RaisePropertyChanged();
|
|
|
+ RaisePropertyChanged(nameof(ClientsView));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ClientsFilter(object sender, FilterEventArgs e)
|
|
|
+ {
|
|
|
+ clients c = e.Item as clients;
|
|
|
+ bool disallow = false;
|
|
|
+
|
|
|
+ // Фильтр по имени
|
|
|
+ if (!string.IsNullOrEmpty(filterName))
|
|
|
+ {
|
|
|
+ if (!c.HumanName.ToLower().Contains(filterName.ToLower()))
|
|
|
+ {
|
|
|
+ disallow = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // Клиент скрыт и не надо показывать скрытых
|
|
|
+ if (!disallow && c.hidden && !filterShowHidden)
|
|
|
+ {
|
|
|
+ disallow = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // По домене почты
|
|
|
+ if (!disallow && filterEmailDomain > 0)
|
|
|
+ {
|
|
|
+ string domain = c.email.Split('.')[1];
|
|
|
+ if (
|
|
|
+ (filterEmailDomain == 1 && domain != "ru") ||
|
|
|
+ (filterEmailDomain == 2 && domain != "com"))
|
|
|
+ {
|
|
|
+ disallow = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ e.Accepted = !disallow;
|
|
|
+ }
|
|
|
|
|
|
public ClientsViewModel()
|
|
|
{
|
|
|
+ filterName = string.Empty;
|
|
|
+ filterShowHidden = false;
|
|
|
+ filterEmailDomain = -1;
|
|
|
+
|
|
|
var db = new Models.Entities();
|
|
|
- var clients = db.clients.Where(c => c.hidden == false);
|
|
|
- Clients = new ObservableCollection<clients>(clients);
|
|
|
+ var clients = new ObservableCollection<clients>(db.clients.ToList());
|
|
|
+
|
|
|
+ clientsCollection = new CollectionViewSource();
|
|
|
+ clientsCollection.Source = clients;
|
|
|
+ clientsCollection.Filter += ClientsFilter;
|
|
|
+ clientsCollection.View.Refresh();
|
|
|
}
|
|
|
}
|
|
|
}
|