Евгений Колесников 11 ay önce
ebeveyn
işleme
65de7b8e52
2 değiştirilmiş dosya ile 40 ekleme ve 21 silme
  1. 1 1
      articles/lab_wpf_binding.md
  2. 39 20
      articles/wpf_template.md

+ 1 - 1
articles/lab_wpf_binding.md

@@ -1,3 +1,3 @@
 # Каркас приложения. Модель данных. Привязка данных.
 
-Используя материалы лекции [Каркас приложения. Модель данных. Привязка данных. Табличный вывод.](../articles/wpf_template.md) и классы из предыдущих [лабораторных работ](../articles/lab8-oop.md)  разработать WPF-приложение. Логотип подставить свой, соответствующий вашей предметной области.
+Используя материалы лекции [Каркас приложения. Модель данных. Привязка данных. Табличный вывод.](./wpf_template.md) и классы из своей предметной области разработать WPF-приложение. Логотип подставить свой, соответствующий вашей предметной области.

+ 39 - 20
articles/wpf_template.md

@@ -12,9 +12,9 @@
 
 * В верхней строке правой колонки **(2)** будет расположено контекстное меню для элементов фильтрации, поиска и т.д. Эта строка имеет высоту "Auto", т.е. будет зависеть от содержимого.
 
-* В середине второй колонки (3) будет расположен основной список с данными: элементы **DataGrid** или **ListView**
+* В середине второй колонки **(3)** будет расположен основной список с данными: элементы **DataGrid** или **ListView**
 
-* В нижней строке второй колонки (4) в перспективе будем располагать счётчики, пагинаторы и т.п. (высота тоже "auto")
+* В нижней строке второй колонки **(4)** в перспективе будем располагать счётчики, пагинаторы и т.п. (высота тоже "auto")
 
 Разметка выглядит так:
 
@@ -67,9 +67,19 @@
 >
 >![](../img/08034.png)
 
-1. Создадим класс **Кошка** (в контекстном меню папки *Model* выбрать *Добавить - класс*):
+1. Создадим классы **Cat (Кошка)** и **CatBreed (порода кошки)** (в контекстном меню папки *Model* выбрать *Добавить - класс*):
 
-    ```cs
+    ```catbreed.cs
+    namespace WpfTemplate.Model
+    {
+        public class CatBreed
+        {
+            public string title { get; set; }
+        }
+    }    
+    ```
+
+    ```cat.cs
     namespace WpfTemplate.Model
     {
         public class Cat
@@ -77,16 +87,16 @@
             public string name { get; set; }
             public int age{ get; set; }
             public string color { get; set; }
-            // порода
-            public string breed { get; set; }
             public string photo { get; set; }
+            // порода
+            public CatBreed breed { get; set; }
         }
     }    
     ```
 
-    >Студия не добавляет модификатор доступа классам - допишите **public**
+    >Студия может не добавить модификатор доступа классам - допишите **public**
 
-2. Для работы с данными создадим интерфейс **IDataProvider** (поставщик данных) и класс **LocalDataProvider**, реализующий этот интерфейс
+1. Для работы с данными создадим интерфейс **IDataProvider** (поставщик данных) и класс **LocalDataProvider**, реализующий этот интерфейс
 
     В интерфейсе нам пока нужен только один метод: получение списка кошек
 
@@ -110,17 +120,17 @@
             return new Cat[]{
                 new Cat{
                     age=1,
-                    breed="Дворняжка", 
+                    breed = new CatBreed() { title = "Дворняжка" }, 
                     color="Белый", 
                     name="Ириска"},
                 new Cat{
                     age=2,
-                    breed="Шотландская вислоухая", 
+                    breed = new CatBreed() { title = "Шотландская вислоухая" }, 
                     color="Коричневый", 
                     name="Изи"},
                 new Cat{
                     age=3,
-                    breed="Сиамский", 
+                    breed = new CatBreed() { title = "Сиамский" }, 
                     color="Цветной", 
                     name="Макс"}
             };
@@ -128,7 +138,7 @@
     }
     ```
 
-3. В пространстве имен проекта создадим класс **Globals**, в котором объявим публичную статическую переменную *dataProvider* типа **IDataProvider**:
+1. В пространстве имен проекта создадим класс **Globals**, в котором объявим публичную статическую переменную *dataProvider* типа **IDataProvider**:
 
     ```cs
     class Globals
@@ -139,7 +149,7 @@
 
     Это нужно, чтобы поставщик данных был виден в любом месте проекта. 
 
-4. В конструкторе главного окна (`MainWindow.xaml.cs`) присвоим глобальной переменной *dataProvider* экземпляр класса **LocalDataProvider** и сохраним список кошек в свойстве **CatList**
+1. В конструкторе главного окна (`MainWindow.xaml.cs`) присвоим глобальной переменной *dataProvider* экземпляр класса **LocalDataProvider** и сохраним список кошек в свойстве **catList**
 
     ```cs
     public IEnumerable<Cat> catList { get; set; }
@@ -149,10 +159,12 @@
         InitializeComponent();
         DataContext = this;
         Globals.dataProvider = new LocalDataProvider();
-        CatList = Globals.dataProvider.getCats();
+        catList = Globals.dataProvider.getCats();
     }
 
-    private void ExitButton_Click(object sender, RoutedEventArgs e)
+    private void ExitButton_Click(
+        object sender, 
+        RoutedEventArgs e)
     {
         Application.Current.Shutdown();
     }
@@ -168,7 +180,8 @@
     Grid.Column="1"
     CanUserAddRows="False"
     AutoGenerateColumns="False"
-    ItemsSource="{Binding catList}">
+    ItemsSource="{Binding catList}"
+>
     <DataGrid.Columns>
         <DataGridTextColumn
             Header="Кличка"
@@ -181,16 +194,16 @@
             Binding="{Binding color}"/>
         <DataGridTextColumn
             Header="Порода"
-            Binding="{Binding breed}"/>
+            Binding="{Binding breed.title}"/>
     </DataGrid.Columns>
 </DataGrid>
 ```
 
-* Атрибут *CanUserAddRows="False"* запрещает элементу **DataGrid** добавлять строки с таблицу
+* Атрибут `CanUserAddRows="False"` запрещает элементу **DataGrid** добавлять строки с таблицу
 
-* Атриут *AutoGenerateColumns="False"* запрещает автоматическое формирование столбцов таблицы - мы вручную описываем те столбцы, которые хотим видеть.
+* Атриут `AutoGenerateColumns="False"` запрещает автоматическое формирование столбцов таблицы - мы вручную описываем те столбцы, которые хотим видеть.
 
-* Атрибут *ItemsSource="{Binding catList}"* "привязывает" к таблице источник данных - наш список кошек. 
+* Атрибут `ItemsSource="{Binding catList}"` "привязывает" к таблице источник данных - наш список кошек. 
 
 * В колонках таблицы мы уже "привязываемся" к свойствам класса источника данных
 
@@ -198,4 +211,10 @@
 
 ![](../img/08035.png)
 
+---
+
+## Задание
+
+Реализовать приложение из лекции и оформить отчет со скриншотами в репозиторий.
+
 [Элементы управления](./t8_elements.md) | [Содержание](../readme.md#тема-8-оконные-приложения) | [Фильтрация данных](./wpf_filtering.md)