Евгений Колесников 10 miesięcy temu
rodzic
commit
fcc8b43a39
1 zmienionych plików z 18 dodań i 11 usunięć
  1. 18 11
      articles/wpf_search_sort.md

+ 18 - 11
articles/wpf_search_sort.md

@@ -4,11 +4,11 @@
 
 # Поиск, сортировка
 
-В этой теме мы познакомимся еще с двумя визуальными элементами: **TextBox** (ввод строки для поиска) и **RadioButton** (сортировка по одному полю)
+В этой теме мы познакомимся ещё с двумя визуальными элементами: **TextBox** (ввод строки для поиска) и **RadioButton** (сортировка по одному полю)
 
 ## Поиск
 
-1. В разметке окна (в элемент WrapPanel) добавляем элемент для ввода теста - TextBox
+1. В разметке окна (в элемент **WrapPanel**) добавляем элемент для ввода теста - **TextBox**
 
     ```xml
     <Label 
@@ -21,6 +21,8 @@
         KeyUp="SearchFilter_KeyUp"/>
     ```    
 
+    Не забываем реализовать (`^ + пробел`) обработчик события _KeyUp_ (этот обработчик срабатывает при отпускании клавиши)
+
 1. В коде окна создаем переменную для хранения строки поиска и запоминаем её в обработчике ввода текста (SearchFilter_KeyUp)
 
     ```cs
@@ -33,7 +35,7 @@
     }
     ```
 
-1. Дорабатываем геттер списка кошек, чтобы после фильтра по возрасту срабатывал ещё и фильтр по кличке
+1. Дорабатываем геттер списка кошек, чтобы после фильтра срабатывал ещё и поиск по кличке
 
     ```cs
     get
@@ -41,12 +43,15 @@
         // сохраняем во временную переменную полный список
         var res = _catList;
 
-        // фильтруем по возрасту
-        res = res.Where(c=>(c.Age>=selectedAge.ageFrom && c.Age<selectedAge.ageTo));
+        // фильтруем (тут только один вариант, у вас может быть несколько)
+        res = res.Where(c => (
+            c.age >= selectedAge.ageFrom && 
+            c.age < selectedAge.ageTo
+        ));
 
-        // если фильтр не пустой, то ищем ВХОЖДЕНИЕ подстроки поиска в кличке без учета регистра
-        if(SearchFilter != "")
-            res = res.Where(c => c.Name.IndexOf(
+        // если строка поиска не пуста, то ищем ВХОЖДЕНИЕ подстроки поиска в кличке без учета регистра
+        if(searchFilter != "")
+            res = res.Where(c => c.name.IndexOf(
                 searchFilter, 
                 StringComparison.OrdinalIgnoreCase) >= 0);
 
@@ -54,13 +59,15 @@
     }
     ```
 
+    Метод **IndexOf** возвращает позицию подстроки в строке или `-1`, если подстрока не найдена. В доке есть метод **Contains**, но он доступен только с версии .NET 9
+
 ## Сортировка
 
 >Мы, в рамках знакомства с визуальными элементами, будем использовать радио-кнопки, но, если вариантов сортировки более одного, то лучше использовать тот-же выпадающий список
 
 Мы будем сортировать по возрасту
 
-Выбранный вариант будем определять по атрибуту **Tag**. Этот атрибут есть у всех элементов и его тип **объект**. 
+Выбранный вариант будем определять по атрибуту **Tag**. Этот атрибут есть у всех визуальных элементов и его тип **объект**. 
 
 1. В разметке добавляем радиокнопки
 
@@ -103,8 +110,8 @@
 
     ```cs
     ...
-    if (sortAsc) res = res.OrderBy(c=>c.Age);
-    else res = res.OrderByDescending(c => c.Age);
+    if (sortAsc) res = res.OrderBy(c => c.age);
+    else res = res.OrderByDescending(c => c.age);
 
     return res;
     ```