ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 27.09.2019

Просмотров: 256

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

№ 10 Ð ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ  MVVM Ð½Ð°  WPF  

Задание 

 

1)

 

Разобраться  Ñ  Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð¾Ð¼  Ð²Ñ‹Ð´Ð°Ñ‡Ð¸/приема  ÐºÐ½Ð¸Ð³  Ð²  Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚еке, 
построенном Ð½Ð° Ð¾ÑÐ½Ð¾Ð²Ðµ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð° MVVM (Model-View-ViewModel) (в 
папке  SampleMVVM). Ð˜Ð·ÑƒÑ‡Ð¸Ñ‚ÑŒ Ð°Ñ€Ñ…итектуру Ð¸ Ð¿Ñ€Ð¸Ð½Ñ†Ð¸Ð¿ Ð¿Ð¾ÑÑ‚роения 
шаблона.  

2)

 

Разработать  Ð¿Ð¾ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ð¸  Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ WPF, Ð¿Ð¾ÑÑ‚роенное Ð½Ð° Ð¾ÑÐ½Ð¾Ð²Ðµ 
MVVM. Ð”ля хранения использовать Ð±Ð°Ð·Ñƒ Ð´Ð°Ð½Ð½Ñ‹Ñ…. 
  

1, 5, 9, 
13 

Банк 

В Ð±Ð°Ð½ÐºÐµ ÑÑƒÑ‰ÐµÑÑ‚вуют Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ Ñ‚ипы Ð²ÐºÐ»Ð°Ð´Ð¾Ð² Ð¸ Ð²ÐºÐ»Ð°Ð´Ñ‡Ð¸ÐºÐ¸. Ð’ 
окне  Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ  Ð½Ð°Ð²Ð¸Ð³Ð°Ñ†Ð¸ÑŽ  Ð¿Ð¾  Ñ‚ипам  Ð²ÐºÐ»Ð°Ð´Ð°  Ñ  Ð¿Ñ€Ð¾ÑÐ¼Ð¾Ñ‚ром 
информации Ð¾ вкладчиках: Ñ‚ип Ð²ÐºÐ»Ð°Ð´Ð°, Ð¤Ð˜Ðž, Ð´Ð°Ñ‚а, Ð±Ð°Ð»Ð°Ð½Ñ Ð¸ Ñ‚.д. 

2, 6, 10, 
14 

ВУЗ 

В  Ð²ÑƒÐ·Ðµ  ÑÑƒÑ‰ÐµÑÑ‚вует  Ð½Ð°Ð±Ð¾Ñ€  Ð´Ð¸ÑÑ†Ð¸Ð¿Ð»Ð¸Ð½:  Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ,  ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑÑ‚во 
лекций,  ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑÑ‚во  Ð»Ð°Ð±Ð¾Ñ€Ð°Ñ‚орных,  Ð²Ð¸Ð´  ÐºÐ¾Ð½Ñ‚роля,  Ð»ÐµÐºÑ‚ор, 
количество  ÑÐ»ÑƒÑˆÐ°Ñ‚ÐµÐ»ÐµÐ¹  Ñ‚.д.  ÐžÑ€Ð³Ð°Ð½Ð¸Ð·Ð¾Ð²Ð°Ñ‚ÑŒ  Ð½Ð°Ð±Ð¾Ñ€  ÑÑ‚удентов  Ð½Ð° 
дисциплину: Ð·Ð°Ð¿Ð¸ÑÑŒ/отмену  Ð½Ð° курс определенного Ð»ÐµÐºÑ‚ора. 

3, 7, 11, 
15 

Склад 

На ÑÐºÐ»Ð°Ð´Ðµ Ð¸Ð¼ÐµÐµÑ‚ся Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð´ÑƒÐºÑ†Ð¸Ñ: Ð²Ð¸Ð´, Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ðµ, 
артикул,  Ñ†ÐµÐ½Ð°,  ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑÑ‚во    Ð¸  Ñ‚.п.  ÐžÑ€Ð³Ð°Ð½Ð¸Ð·Ð¾Ð²Ð°Ñ‚ÑŒ  Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ, 
удаление и Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ðµ товаров Ð½Ð° складе  

4, 8, 12, 
16 

Авиакомпания 

У Ð°Ð²Ð¸Ð°ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ð¸ ÐµÑÑ‚ÑŒ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð½Ñ‹Ðµ Ñ€ÐµÐ¹ÑÑ‹: Ð½Ð¾Ð¼ÐµÑ€, Ð´ÐµÐ½ÑŒ Ð½ÐµÐ´ÐµÐ»Ð¸, 
пункт  Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ,  ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑÑ‚во  Ð¼ÐµÑÑ‚  Ñ‚.п.  ÐžÑ€Ð³Ð°Ð½Ð¸Ð·Ð¾Ð²Ð°Ñ‚ÑŒ  Ð¿Ñ€Ð¾Ð´Ð°Ð¶Ñƒ 
билетов (с возможностью Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‚а). 

По 
желанию 

Сделайте  ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ  (свойства,  Ñ€Ð°Ð·Ð¼ÐµÑ€Ñ‹,  ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑÑ‚во  Ð¸  Ñ‚п.) 
игровыми Ð¾Ð±ÑŠÐµÐºÑ‚ами (птицы, ÐºÐ¾Ð»Ð¾Ð±ÐºÐ¸, ÑÐ°Ð¼Ð¾Ð»ÐµÑ‚Ñ‹, Ñ‚анки), ÐºÐ¾Ñ‚орые 
меняют ÑÐ²Ð¾Ðµ визуальное Ð¾Ñ‚ображение или Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ðµ. 

 
 


background image

Вопросы 

1.

 

Что такое MVC, MVP, MVVM? 

2.

 

Объясните из ÐºÐ°ÐºÐ¸Ñ… ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚ов ÑÐ¾ÑÑ‚оит Ð¿Ð°Ñ‚терн MVVM? 

3.

 

Каким Ð¾Ð±Ñ€Ð°Ð·Ð¾Ð¼ Ð¿Ð°Ñ‚терн Ð¼Ð¾Ð¶Ð½Ð¾ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ñ‚ÑŒ Ð² WPF?  

4.

 

 ÐžÐ±ÑŠÑÑÐ½Ð¸Ñ‚е назначение Ð¸Ð½Ñ‚ерфейса INotifyPropertyChanged? 

5.

 

Зачем Ð½ÑƒÐ¶ÐµÐ½ Ð¸Ð½Ñ‚ерфейс ICommand Ð¸ как паттерн MVVM использует 
команды Ð² WPF-приложениях. 

6.

 

Чем отличаются команды Ð¾Ñ‚ ÑÐ¾Ð±Ñ‹Ñ‚ий? 

7.

 

Расскажите Ð¾ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ð¸ Ð¸ Ð¾Ð± Ð¾ÑÐ½Ð¾Ð²Ð½Ñ‹Ñ… Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚ях ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ñ… 
библиотек Ð¸ Ñ„реймворков: Light Toolkit, Catel Ð¸ Prism. 

Теоретические ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ: 

 

 

MVVM  â€“  Model  â€“  View  â€“  ViewModel  â€“  Ð¿Ð°Ñ‚терн  Ð¾Ñ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ð¸  PL 

(

presentation layer

 â€“ ÑƒÑ€Ð¾Ð²ÐµÐ½ÑŒ Ð¿Ñ€ÐµÐ´ÑÑ‚авления). 

Паттерн  MVVM  Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÑÐµÑ‚ся  Ð¿Ñ€Ð¸  ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ð¸  Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹  Ñ  Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ 

WPF.    Ð­Ñ‚от  Ð¿Ð°Ñ‚терн  Ð±Ñ‹Ð»  Ð¿Ñ€Ð¸Ð´ÑƒÐ¼Ð°Ð½  -  John  Gossman.  Ð˜Ð´ÐµÐ¾Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑÐºÐ¸  MVVM 
похож  Ð½Ð° Presentation  Model Ð¾Ð¿Ð¸ÑÐ°Ð½Ð½Ñ‹Ð¹  Ð¤Ð°ÑƒÐ»ÐµÑ€Ð¾Ð¼,  Ð½Ð¾  MVVM  ÑÐ¸Ð»ÑŒÐ½Ð¾ 
опирается Ð½Ð° возможности WPF. 

Шаблон  MVVM  Ð¸Ð¼ÐµÐµÑ‚  Ñ‚ри  Ð¾ÑÐ½Ð¾Ð²Ð½Ñ‹Ñ…  ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚а: 

модель

,  ÐºÐ¾Ñ‚орая 

представляет  Ð±Ð¸Ð·Ð½ÐµÑ-логику  Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ, 

представление

 Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ельского 

интерфейса  XAML,  Ð¸ 

представление-модель

,  Ð²  ÐºÐ¾Ñ‚ором  ÑÐ¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚ся  Ð²ÑÑ 

логика Ð¿Ð¾ÑÑ‚роения Ð³Ñ€Ð°Ñ„ического Ð¸Ð½Ñ‚ерфейса Ð¸ ÑÑÑ‹Ð»ÐºÐ° Ð½Ð° Ð¼Ð¾Ð´ÐµÐ»ÑŒ, Ð¿Ð¾ÑÑ‚ому Ð¾Ð½ 
выступает в ÐºÐ°Ñ‡ÐµÑÑ‚ве модели Ð´Ð»Ñ представления 

Основная  Ð¾ÑÐ¾Ð±ÐµÐ½Ð½Ð¾ÑÑ‚ÑŒ  MVVM  Ð·Ð°ÐºÐ»ÑŽÑ‡Ð°ÐµÑ‚ся  Ð²  Ñ‚ом,  Ñ‡Ñ‚о  Ð²ÑÐµ  Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ 

выносится  Ð¸Ð· 

представления  (view)

 Ð²

   Ð¼Ð¾Ð´ÐµÐ»ÑŒ  Ð¿Ñ€ÐµÐ´ÑÑ‚авления  (view 

model)

.  Ð¡Ð²ÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ðµ Ð¿Ñ€ÐµÐ´ÑÑ‚авления Ð¸ Ð¼Ð¾Ð´ÐµÐ»Ð¸ Ð¿Ñ€ÐµÐ´ÑÑ‚авления Ð¾ÑÑƒÑ‰ÐµÑÑ‚вляется 

декларативными Ð±Ð°Ð¹Ð½Ð´Ð¸Ð½Ð³Ð°Ð¼Ð¸ Ð² XAML Ñ€Ð°Ð·Ð¼ÐµÑ‚ке. Ð­Ñ‚о Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ‚ Ñ‚естировать 
все Ð´ÐµÑ‚али Ð¸Ð½Ñ‚ерфейса не используя сложных Ð¸Ð½ÑÑ‚рументальных ÑÑ€ÐµÐ´ÑÑ‚в. 

Рассмотрим проект. 

Для Ð¿Ñ€Ð¾ÐµÐºÑ‚а, Ð¿Ð¾ÑÑ‚роенного Ð½Ð° Ð¾ÑÐ½Ð¾Ð²Ðµ MVVM  ÑÐ¾Ð·Ð´Ð°ÐµÑ‚ся ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÑÑ‚руктура 
файлов: 


background image

 

Пусть  Ð½Ð°Ð´Ð¾ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ñ‚ÑŒ  ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ  Ð·Ð°Ð´Ð°Ñ‡Ñƒ:  Ð¾Ñ‚ображение ÑÐ¿Ð¸ÑÐºÐ°  ÐºÐ½Ð¸Ð³ 

читального Ð·Ð°Ð»Ð°. Ð£ ÐºÐ½Ð¸Ð³Ð¸ ÐµÑÑ‚ÑŒ: ÐÐ°Ð·Ð²Ð°Ð½Ð¸Ðµ, ÐÐ²Ñ‚ор, Ð”оступное ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑÑ‚во 

Пусть Ñ…одят Ñ‡Ð¸Ñ‚атели Ð±ÐµÑ€ÑƒÑ‚ ÐºÐ½Ð¸Ð³Ð¸ Ð¿Ð¾Ñ‡Ð¸Ñ‚ать Ð¸Ð»Ð¸ Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÑŽÑ‚ Ð¸Ñ… Ð¾Ð±Ñ€Ð°Ñ‚но. 

Надо Ð² Ð»ÑŽÐ±Ð¾Ð¹ Ð¼Ð¾Ð¼ÐµÐ½Ñ‚ Ð·Ð½Ð°Ñ‚ÑŒ, ÑÐºÐ¾Ð»ÑŒÐºÐ¾ ÑÐºÐ·ÐµÐ¼Ð¿Ð»ÑÑ€Ð¾Ð² Ñ‚ой Ð¸Ð»Ð¸ Ð¸Ð½Ð¾Ð¹ ÐºÐ½Ð¸Ð³Ð¸ Ð¾ÑÑ‚алось 
и Ð¼Ð¾Ð¶ÐµÐ¼ ли Ð¼Ñ‹ ÐµÐµ Ð²Ñ‹Ð´Ð°Ñ‚ÑŒ. ÐÐ° примере задачи Ñ€Ð°ÑÑÐ¼Ð¾Ñ‚рим MVVM 

Model 

Model â€”  ÑÑ‚о  ÑÑƒÑ‰Ð½Ð¾ÑÑ‚и  ÑÐ¸ÑÑ‚емы.  ÐœÐ¾Ð´ÐµÐ»ÑŒ  Ð±ÑƒÐ´ÐµÑ‚  ÑÐ¾ÑÑ‚оять  Ð¸Ð·  Ð¾Ð´Ð½Ð¾Ð³Ð¾ 

простого ÐºÐ»Ð°ÑÑÐ°: 

Book.cs 

class

 

Book

 

    { 
        

public

 

string

 Title { 

get

set

; } 

        

public

 

string

 Author { 

get

set

; } 

        

public

 

int

 Count { 

get

set

; } 

 
        

public

 Book(

string

 title, 

string

 author, 

int

 count) 

        { 
            

this

.Title = title; 

            

this

.Author = author; 

            

this

.Count = count; 

        } 

    } 

ViewModel 

ViewModel â€”пожалуй,  ÐºÐ»ÑŽÑ‡ÐµÐ²Ð¾Ð¹  Ð¼Ð¾Ð¼ÐµÐ½Ñ‚.  Ð­Ñ‚о  Ñ‚акие  ÑÐ¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ñ‹Ðµ 

классы, которые: 



 

Осуществляют ÑÐ²ÑÐ·ÑŒ Ð¼ÐµÐ¶Ð´Ñƒ Ð¼Ð¾Ð´ÐµÐ»ÑŒÑŽ Ð¸ Ñ„ормой. 


background image



 

Отслеживают Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ð´Ð°Ð½Ð½Ñ‹Ñ…, Ð¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð½Ñ‹Ðµ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚елем. 



 

Обрабатывают Ð»Ð¾Ð³Ð¸ÐºÑƒ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ View (механизм ÐºÐ¾Ð¼Ð°Ð½Ð´) 

В ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ Ð´Ð°Ñ‚абиндинга Ð² WPF ÑÑ‚о Ð´Ð°ÐµÑ‚ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚ат: Ð² C#-коде 

формы ÑÑ‚ановится совсем Ð½Ðµ надо Ð½Ð¸Ñ‡ÐµÐ³Ð¾ Ð¿Ð¸ÑÐ°Ñ‚ÑŒ. ViewModel Ð´Ð»Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸: 

BookViewModel

.cs 

class

 

BookViewModel

 : 

ViewModelBase

 

    { 
        

public

 

Book

 Book; 

 
        

public

 BookViewModel(

Book

 book) 

        { 
            

this

.Book = book; 

        } 
 
        

public

 

string

 Title 

        { 
            

get

 { 

return

 Book.Title; } 

            

set

  

            { 
                Book.Title = 

value

                OnPropertyChanged(

"Title"

); 

            } 
        } 
 
        

public

 

string

 Author 

        { 
            

get

 { 

return

 Book.Author; } 

            

set

 

            { 
                Book.Author = 

value

                OnPropertyChanged(

"Author"

); 

            } 
        } 
 
        

public

 

int

 Count 

        { 
            

get

 { 

return

 Book.Count; } 

            

set

 

            { 
                Book.Count = 

value

                OnPropertyChanged(

"Count"

); 

            } 

        }

  

BookViewModel ÑƒÐ½Ð°ÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½ 

от 

класса ViewModelBase. ViewModelBase, 

в 

свою 

очередь, 

реализует 

интерфейс INotifyPropertyChanged Ð¸  ÑÐ¾Ð´ÐµÑ€Ð¶Ð¸Ñ‚  Ñ„ункцию OnPropertyChanged. 
Это Ð½ÑƒÐ¶Ð½Ð¾ Ð´Ð»Ñ Ñ‚ого, Ñ‡Ñ‚обы Ð²ÑÐµÐ³Ð´Ð° Ð¼Ð¾Ð¶Ð½Ð¾ Ð±Ñ‹Ð»Ð¾ Ð²Ñ‹Ð·Ð²Ð°Ñ‚ÑŒ ÑÐ¾Ð±Ñ‹Ñ‚ие "изменилось 
такое-то Ð¿Ð¾Ð»Ðµ". ÐšÐ°Ðº Ð²Ð¸Ð´Ð½Ð¾ Ð² ÐºÐ¾Ð´Ðµ, Ð¿Ñ€Ð¸ Ð»ÑŽÐ±Ð¾Ð¼ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¸ Ð¿Ð¾Ð»Ñ Ñ‚акое ÑÐ¾Ð±Ñ‹Ñ‚ие 
вызываем  Ð¸  Ð¿ÐµÑ€ÐµÐ´Ð°ÐµÐ¼  Ð²  ÐºÐ°Ñ‡ÐµÑÑ‚ве  Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ра  ÐµÐ³Ð¾  Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ.  ÐŸÐ¾Ñ‚ом  Ð½Ð°  Ñ„орме 
биндинг  Ð¼Ð¾Ð¶ÐµÑ‚  ÑÑ‚о  ÑÐ¾Ð±Ñ‹Ñ‚ие  Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ать  Ð¸,  ÐºÐ°Ðº  ÑÐ»ÐµÐ´ÑÑ‚вие,  Ð¸Ð½Ñ‚ерфейс  Ð¸ 
ViewModel Ð²ÑÐµÐ³Ð´Ð° будут Ð´Ñ€ÑƒÐ³ с Ð´Ñ€ÑƒÐ³Ð¾Ð¼ синхронизированы. 


background image

Помимо BookViewModel ÐµÑÑ‚ÑŒ  ÐµÑ‰Ðµ  ÐºÐ»Ð°ÑÑ MainViewModel,  ÑÐ²ÑÐ·Ð°Ð½Ð½Ñ‹Ð¹  Ñ 

формой. Ð”обавим в Ð½ÐµÐ³Ð¾ Ð¿Ð¾Ð»Ðµ: 

public

 

ObservableCollection

<

BookViewModel

> BooksList { 

get

set

; } 

 

ObservableCollection â€”  ÑÑ‚о  ÑÐ¿ÐµÑ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ  ÐºÐ¾Ð»Ð»ÐµÐºÑ†Ð¸Ñ,  ÐºÐ¾Ñ‚орая  ÑƒÐ¼ÐµÐµÑ‚ 

отслеживать Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ в ÑÐµÐ±Ðµ. Ð¢Ð°ÐºÐ¶Ðµ изменим конструктор: 

public

 MainViewModel(

List

<

Book

> books) 

        { 
            BooksList = 

new

 

ObservableCollection

<

BookViewModel

>(books.Select(b => 

new

 

BookViewModel

(b))); 

        }

  

View 

Это  Ð¾ÐºÐ½Ð¾,  Ð»Ð¸Ð±Ð¾  User  Control.  Ð£  Ð»ÑŽÐ±Ð¾Ð³Ð¾  FrameworkElement-а  WPF  ÐµÑÑ‚ÑŒ 

такое Ð¿Ð¾Ð»Ðµ DataContext. DataContext Ð¼Ð¾Ð¶ÐµÑ‚ Ð±Ñ‹Ñ‚ÑŒ Ð»ÑŽÐ±Ñ‹Ð¼ object-ом, Ð¸Ð¼ÐµÑ‚ÑŒ ÐºÐ°ÐºÐ¸Ðµ 
угодно  Ð¿Ð¾Ð»Ñ,  Ð°  ÐµÐ³Ð¾  Ð³Ð»Ð°Ð²Ð½Ð°Ñ  Ð·Ð°Ð´Ð°Ñ‡Ð°  â€”  ÑÐ²Ð»ÑÑ‚ься  Ð¸ÑÑ‚очником  Ð´Ð°Ð½Ð½Ñ‹Ñ…  Ð´Ð»Ñ 
Databinding-а.  Ð¤Ð¾Ñ€Ð¼Ð°  Ð²ÑÐµÐ³Ð¾  Ð¾Ð´Ð½Ð°,  DataContext  Ð´Ð»Ñ  Ð½ÐµÐµ  Ð·Ð°Ð¿Ð¾Ð»Ð½ÑÐµÑ‚ся  Ð² 
методе OnStartup, Ñ‡Ñ‚о Ð² App.xaml.cs. ÐœÐ¾Ð´Ð¸Ñ„ицируем  Ð¸ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ся ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ: 

App.xaml.cs 

public

 

partial

 

class

 

App

 : 

Application

 

    { 
        

private

 

void

 OnStartup(

object

 sender, 

StartupEventArgs

 e) 

        { 
            

List

<

Book

> books = 

new

 

List

<

Book

>() 

            { 
                

new

 

Book

(

"Пттерны Ð¿Ñ€Ð¾ÐµÑ‚ирования"

"John Gossman"

, 3), 

                

new

 

Book

(

"CLR via C#"

"Джеффри Ð Ð¸Ñ…тер"

, 2), 

                

new

 

Book

(

"Исскуство Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ"

"Кнут"

, 2) 

            }; 
 
            

MainView

 view = 

new

 

MainView

(); 

// ÑÐ¾Ð·Ð´Ð°Ð»Ð¸ View

 

            

MainViewModel

 viewModel = 

new

 ViewModels.

MainViewModel

(books); 

// Ð¡Ð¾Ð·Ð´Ð°Ð»Ð¸ 

ViewModel

 

            view.DataContext = viewModel; 

// Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ð»Ð¸ ViewModel Ð²Ð¾ View Ð² ÐºÐ°Ñ‡ÐµÑÑ‚ве 

DataContext

 

            view.Show(); 
        } 

    } 

Осталось Ð½Ð°Ð¿Ð¸ÑÐ°Ñ‚ÑŒ XAML-код Ñ„ормы: 

MainView.xaml 

<

ListView

 ItemsSource

="{

Binding

 BooksList

}"

 IsSynchronizedWithCurrentItem

="True">

 

            

<

ListView.ItemTemplate

>

 

                

<

DataTemplate

>

 

                    

<

Border

 BorderBrush

="Bisque"

 BorderThickness

="1"

 Margin

="10">

 

                        

<

StackPanel

 Margin

="10">

 

                            

<

TextBlock

 Text

="{

Binding

 Title

}"

 FontWeight

="Bold"/>

 

                            

<

TextBlock

 Text

="{

Binding

 Author

}" />

 

                            

<

StackPanel

 Orientation

="Horizontal">

 

                                

<

TextBlock

 Text

="Осталось:" />