|
|
@@ -12,9 +12,9 @@
|
|
|
|
|
|
* В верхней строке правой колонки **(2)** будет расположено контекстное меню для элементов фильтрации, поиска и т.д. Эта строка имеет высоту "Auto", т.е. будет зависеть от содержимого.
|
|
|
|
|
|
-* В середине второй колонки (3) будет расположен основной список с данными: элементы **DataGrid** или **ListView**
|
|
|
+* В середине второй колонки **(3)** будет расположен основной список с данными: элементы **DataGrid** или **ListView**
|
|
|
|
|
|
-* В нижней строке второй колонки (4) в перспективе будем располагать счётчики, пагинаторы и т.п. (высота тоже "auto")
|
|
|
+* В нижней строке второй колонки **(4)** в перспективе будем располагать счётчики, пагинаторы и т.п. (высота тоже "auto")
|
|
|
|
|
|
Разметка выглядит так:
|
|
|
|
|
|
@@ -67,9 +67,19 @@
|
|
|
>
|
|
|
>
|
|
|
|
|
|
-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 @@
|
|
|
|
|
|

|
|
|
|
|
|
+---
|
|
|
+
|
|
|
+## Задание
|
|
|
+
|
|
|
+Реализовать приложение из лекции и оформить отчет со скриншотами в репозиторий.
|
|
|
+
|
|
|
[Элементы управления](./t8_elements.md) | [Содержание](../readme.md#тема-8-оконные-приложения) | [Фильтрация данных](./wpf_filtering.md)
|