Евгений Колесников hace 3 años
padre
commit
7a14a5fad2
Se han modificado 2 ficheros con 45 adiciones y 2 borrados
  1. 6 0
      articles/cs_layout2.md
  2. 39 2
      articles/cs_pagination2.md

+ 6 - 0
articles/cs_layout2.md

@@ -6,6 +6,12 @@
 <a href="../articles/cs_pagination2.md">Пагинация, сортировка, фильтрация, поиск
 </a></td><tr></table>
 
+Колока 1 | Колонка 2
+---------|----------
+&nbsp;   | Панель элементов управления `<WrapPanel Grid.Column="1"`
+&nbsp;   | Список продукции `<ListView Grid.Column="1" Grid.Row="1"`
+&nbsp;   | Пагинатор `<ListView Grid.Column="1" Grid.Row="2"`
+
 # Вывод данных согласно макету (ListView, Image).
 
 >Старый вариант с SQL-запросами находится [тут](./cs_layout.md)

+ 39 - 2
articles/cs_pagination2.md

@@ -445,7 +445,7 @@ public IEnumerable<Product> ProductList {
     </ListView>
     ```
 
-2. В проект добавить класс **PageItem**
+1. В проект добавить класс **PageItem**
 
     ```cs
     public class PageItem
@@ -454,7 +454,7 @@ public IEnumerable<Product> ProductList {
     }
     ```
 
-3. В классе окна объявить переменную **PageList** и в геттере списка продукции заполнять её, а не генерировать динамически содержимое для пагинатора
+1. В классе окна объявить переменную **PageList** и в геттере списка продукции заполнять её, а не генерировать динамически содержимое для пагинатора
 
     ```cs
     public List<PageItem> PageList { get; set; } = new List<PageItem>();
@@ -473,6 +473,43 @@ public IEnumerable<Product> ProductList {
     Invalidate("PageList");
     ```
 
+1. Метод **Invalidate** с указанием изменившегося элемента
+
+    ```cs
+    private void Invalidate(string ComponentName = "ProductList") 
+    {
+        if (PropertyChanged != null)
+            PropertyChanged(
+                this, 
+                new PropertyChangedEventArgs(ComponentName));
+    }
+    ```
+
+1. Реализация обработчика клика по кнопкам пагинатора:
+
+    ```cs
+    private void TextBlock_PreviewMouseDown(object sender, MouseButtonEventArgs e)
+    {
+        switch ((sender as TextBlock).Text)
+        {
+            case "<":
+                // переход на предыдущую страницу с проверкой счётчика
+                if (currentPage > 0) currentPage--;
+                return;
+            case ">":
+                // переход на следующую страницу с проверкой счётчика
+                if (currentPage < _ProductList.Count() / PAGE_LEN) currentPage++;
+                return;
+            default:
+                // в остальных элементах просто номер странцы
+                // учитываем, что надо обрезать пробелы (Trim)
+                // и то, что номера страниц начинаются с 0
+                currentPage = Convert.ToInt32(
+                    (sender as TextBlock).Text) - 1;
+                return;
+        }
+    }
+    ```
 ---
 
 <table style="width: 100%;"><tr><td style="width: 40%;">