powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Динамический фильтр
9 сообщений из 9, страница 1 из 1
Динамический фильтр
    #39796290
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, решил попробовать применить кусок патерна спецификации для динамической фильтрации следующим образом

Код: c#
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.
 
      ///Коллекция со всеми элементами
	     private ObservableCollection<MyClass> MyClasses { get; set; }
				
        ///Отфильтрованная коллекция 	
	     public ObservableCollection<MyClass> FilteredMyClasses =>new ObservableCollection<MyClass>(MyClasses.Where(Filter));
	 	 
	     #region Filters

        /// <summary>
        /// Фильтрация по текстовому свойству
        /// </summary>
        private Expression<Func<MyClass, bool>> FilterMyClassExpression => f=>f.FilteredProperty.Contains(FilterText);

        /// <summary>
        /// Без фильтрации
        /// </summary>
        private Expression<Func<MyClass, bool>> NoFilterMyClassExpression => f=> true;

        private  Func<MyClass, bool> Filter => IsFilterApplyied ? FilterMyClassExpression.Compile(): NoFilterMyClassExpression.Compile();

        #endregion			
	
	 /// <summary>
        /// Применен ли фильтр 
        /// </summary>
		
        public bool IsFilterApplyied => !string.IsNullOrEmpty(FilterText);
		
				
	/// <summary>
        /// Свойство, привязанное к TextBox, в который вводим строку, по которой нужно фильтровать
        /// </summary>
        private string _FilterText;

        public string FilterText
        {
            get { return _FilterText; }
            set {              
                    _FilterText = value;
                    OnPropertyChanged("IsFilterApplyied");               
                }
        }



Все работает, но не нравится то, что нужно каждый раз пересоздавать коллекцию
Код: c#
1.
new ObservableCollection<MyClass>(MyClasses.Where(Filter)) 


Можно ли сделать менее костыльно?
...
Рейтинг: 0 / 0
Динамический фильтр
    #39796326
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял, зачем пересоздавать коллекцию? Если ты хочешь коробочную фильтрацию, так и используй ее на представлении коллекции
...
Рейтинг: 0 / 0
Динамический фильтр
    #39796336
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в ICollectionView есть предикат для фильтрации, можешь накрутить туда выражений, если нужно :)
...
Рейтинг: 0 / 0
Динамический фильтр
    #39796381
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,Roman Mejtes,
ICollectionView относится к View слою (WindowsBase.dll ), поэтому не хочется её тянуть в слой ViewModel- поэтому хочется избежать использование ICollectionView;
Поэтому из коробки не подходит.
Пересоздаю коллекцию, чтобы фильтр применился, пока не догнал как можно без пересоздания применить предикат.
...
Рейтинг: 0 / 0
Динамический фильтр
    #39796383
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ранее пробовал работать с ICollectionView- не очень понравилось (заморочки с многопоточностью и тд)
...
Рейтинг: 0 / 0
Динамический фильтр
    #39796405
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subICollectionView относится к View слою (WindowsBase.dll ), поэтому не хочется её тянуть в слой ViewModelМожно CollectionView в представлении создать явно с помощью XAML, а предикат уже привязать к ViewModel
...
Рейтинг: 0 / 0
Динамический фильтр
    #39797935
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
коллекцию я в xaml объявлю как

Код: c#
1.
<CollectionViewSource x:Key="cvCbSelfBuffsSkills" Source="{ Binding coll}" />



а как предикат в него запихнуть? Через markup Extension?
...
Рейтинг: 0 / 0
Динамический фильтр
    #39797948
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ща посмотрел как я делал - у меня был AttachedProperty для ItemsControl, который сам применял фильтр так
Код: c#
1.
2.
3.
4.
		private void SetFilter(ItemsControl itemsControl, Predicate<object> filter)
		{
			itemsControl.Items.Filter = filter;
		}
...
Рейтинг: 0 / 0
Динамический фильтр
    #39797952
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Код: c#
1.
IsFilterApplyied 

Applied же!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Динамический фильтр
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]