Шаг 8. Использование элемента <ListView> для отображения системы дорог, заданной списком, элемент которого – город_откуда, город_куда, стоимость_проезда.
Элемент списка дорог удобно задать в виде объекта специально созданного класса Door. Для работы со списком дорог будет использована страница Page2.xaml.
Действие 1. Включить в состав проекта файл класса с именем Door. cs (рисунок 3.16).

Рисунок 3.16
Действие 2. Модифицировать программный код файла Door. cs и включить описание свойств и конструктора класса Door.
Листинг Door. cs
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
namespace WpfApplication1
{
class Door
{
int id;
public int ID
{
get { return id; }
set { id = value; }
}
string fromTown;
public string FromTown
{
get { return fromTown; }
set { fromTown = value; }
}
string toTown;
public string ToTown
{
get { return toTown; }
set { toTown = value; }
}
int cost;
public int Cost
{
get { return cost; }
set { cost = value; }
}
// Конструктор с параметрами
public Door(int id, string fromTown, string toTown, int cost)
{
this. ID = id;
this. FromTown = fromTown;
this. ToTown = toTown;
this. Cost = cost;
}
// Конструктор по умолчанию
public Door() { }
}
}
Действие 3. Используя ниже приведённое XAML-описание, выполнить разметку страницы Page2.xaml.
Листинг Page2.xaml
<Page x:Class="WpfApplication1.Page2"
xmlns="http://schemas. microsoft. com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas. /winfx/2006/xaml"
xmlns:mc="http://schemas. openxmlformats. org/markup-compatibility/2006"
xmlns:d="http://schemas. /expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="400" d:DesignWidth="400" Title="Page2" Name="page2" Loaded="page2_Loaded">
<StackPanel>
<ListView Name="gridDoors" SelectionMode="Single" VerticalContentAlignment="Top">
<ListView. ItemContainerStyle>
<Style>
<Setter Property="Control. HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Control. VerticalContentAlignment" Value="Stretch" />
</Style>
</ListView. ItemContainerStyle>
<ListView. View>
<GridView>
<GridViewColumn Header="Номер" Width="Auto">
<GridViewColumn. CellTemplate>
<DataTemplate>
<TextBox Name="ID" Text="{Binding Path=ID, Mode=TwoWay}" />
</DataTemplate>
</GridViewColumn. CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Откуда" Width="Auto">
<GridViewColumn. CellTemplate>
<DataTemplate>
<TextBox Name="FromTown" Text="{Binding Path=FromTown, Mode=TwoWay}" />
</DataTemplate>
</GridViewColumn. CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Куда" Width="Auto">
<GridViewColumn. CellTemplate>
<DataTemplate>
<TextBox Name="ToTown" Text="{Binding Path=ToTown, Mode=TwoWay}" />
</DataTemplate>
</GridViewColumn. CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Цена" Width="Auto">
<GridViewColumn. CellTemplate>
<DataTemplate>
<TextBox Name="Cost" Text="{Binding Path=Cost, Mode=TwoWay}" />
</DataTemplate>
</GridViewColumn. CellTemplate>
</GridViewColumn>
</GridView>
</ListView. View>
</ListView>
<Grid VerticalAlignment="Center" Margin="5">
<Grid. RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid. RowDefinitions>
<Grid. ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid. ColumnDefinitions>
<Label Grid. Row="0" Grid. Column="0" Padding="5" HorizontalAlignment="Left">
Порядковый номер
</Label>
<TextBox Name="tbID" Grid. Row="0" Grid. Column="1" Background="Beige">
</TextBox>
<Label Grid. Row="1" Grid. Column="0" Padding="5" HorizontalAlignment="Left">
Город - откуда
</Label>
<TextBox Name="tbFrom" Grid. Row="1" Grid. Column="1" Background="Beige">
</TextBox>
<Label Grid. Row="2" Grid. Column="0" Padding="5" HorizontalAlignment="Left">
Город - куда
</Label>
<TextBox Name="tbTo" Grid. Row="2" Grid. Column="1" Background="Beige">
</TextBox>
<Label Grid. Row="3" Grid. Column="0" Padding="5" HorizontalAlignment="Left">
Стоимость проезда по дороге
</Label>
<TextBox Name="tbCost" Grid. Row="3" Grid. Column="1" Background="Beige">
</TextBox>
<Button Grid. Row="5" Grid. Column="0" Click="Button_Click">
Добавить
</Button>
<Button Grid. Row="5" Grid. Column="1" Click="Button_Click_1">
Удалить
</Button>
</Grid>
</StackPanel>
</Page>
Действие 4. С помощью контекстного меню добавить методы обработки событий Loaded="page2_Loaded", Click="Button_Click" и Click="Button_Click_1" в файл Page2.xaml. cs.
Действие 5. Модифицировать код файла Page2.xaml. cs, добавив программный код обработки событий из листинга, приведённого ниже.
Листинг Page2.xaml. cs
using System;
using System. Collections. Generic;
using System. Linq;
using System. Text;
using System. Windows;
using System. Windows. Controls;
using System. Windows. Data;
using System. Windows. Documents;
using System. Windows. Input;
using System. Windows. Media;
using System. Windows. Media. Imaging;
using System. Windows. Navigation;
using System. Windows. Shapes;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Page2.xaml
/// </summary>
public partial class Page2 : Page
{
// Объект для хранения списка дорог
List<Door> doors = new List<Door>();
Door door;
public Page2()
{
InitializeComponent();
}
private void page2_Loaded(object sender, RoutedEventArgs e)
{
door = new Door();
door. ID = 0;
door. FromTown = "Усть-Каменогорск";
door. ToTown = "Астана";
door. Cost = 30000;
doors. Add(door);
door = new Door();
door. ID = 1;
door. FromTown = "Усть-Каменогорск";
door. ToTown = "Алматы";
door. Cost = 35000;
doors. Add(door);
door = new Door();
door. ID = 2;
door. FromTown = "Усть-Каменогорск";
door. ToTown = "Москва";
door. Cost = 75000;
doors. Add(door);
door = new Door();
door. ID = 3;
door. FromTown = "Астана";
door. ToTown = "Москва";
door. Cost = 60000;
doors. Add(door);
gridDoors. ItemsSource = doors;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
// Добавить новый объект в список
if (!(tbID. Text == "") & !(tbFrom. Text == "") & !(tbTo. Text == "") & !(tbCost. Text == ""))
{
door = new Door();
door. ID = Convert. ToInt32(tbID. Text);
door. FromTown = tbFrom. Text;
door. ToTown = tbTo. Text;
door. Cost = Convert. ToInt32(tbCost. Text);
doors. Add(door);
gridDoors. ItemsSource = null;
gridDoors. ItemsSource = doors;
tbID. Text = "";
tbFrom. Text = "";
tbTo. Text = "";
tbCost. Text = "";
}
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// Номер удаляемого из списка объекта не должен превышать
// количества объектов в списке
if (!(tbID. Text == "") & (Convert. ToInt32(tbID. Text)<=doors. Count-1))
{
doors. RemoveRange(Convert. ToInt32(tbID. Text), 1);
gridDoors. ItemsSource = null;
gridDoors. ItemsSource = doors;
}
}
}
}
Действие 6. Запустить проект на выполнение и проверить работоспособность добавленного XAML-описания для Page2.xaml и процедурной части файла Page2.xaml. cs.
Рисунок 3.17 иллюстрирует простейшие операции по добавлению и удалению объекта из списка doors, отображённого с помощью элемента <ListView> с именем Name="gridDoors".

Рисунок 3.17
Класс ListView - это специализированный класс спискового типа, предназначенный для отображения различных представлений одних и тех же данных. Он особенно удобен, когда требуется создать представление, состоящее из множества столбцов и отображающее о каждом элементе данных несколько различных фрагментов данных.
Класс ListView унаследован от ListBox и дополняет его свойством View, которое представляет ещё одну возможность для создания многофункциональных списковых представлений. Если это свойство не установлено, элемент ListView ведет себя как его менее мощный предок - класс ListBox.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Основные порталы (построено редакторами)
