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

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

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

Добавлен: 27.09.2019

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

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

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

                                

<

TextBlock

 Text

="{

Binding

 Count

,

 Mode

=TwoWay}"

 

FontWeight

="Bold"

 Margin

="10,0"/>

 

                                

<

TextBlock

 Text

="шт" />

 

                            

</

StackPanel

>

 

                        

</

StackPanel

>

 

                    

</

Border

>

 

                

</

DataTemplate

>

 

            

</

ListView.ItemTemplate

>

 

        

</

ListView

>

 

Обратите  Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ Ð½Ð° ÐºÐ¾Ð½ÑÑ‚рукцию Binding Ð² Ñ€Ð°Ð·Ð¼ÐµÑ‚ке Ñ„ормы. Ð¢Ð°ÐºÐ¸Ð¼ 

образом  Ð¼Ð¾Ð¶Ð½Ð¾  Ð¿Ñ€Ð¸Ð²ÑÐ·Ñ‹Ð²Ð°Ñ‚ÑŒ  Ð¿Ð¾Ð»Ñ  Ð¾Ð±ÑŠÐµÐºÑ‚а,  Ð½Ð°Ñ…одящегося  Ð²  DataContext-е,  Ðº 
атрибутам ÐºÐ¾Ð½Ñ‚ролов. 

 

Редактирование 

Для Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð¾Ð¹ Ð² ÑÐ¿Ð¸ÑÐºÐµ ÐºÐ½Ð¸Ð³Ð¸ Ð±ÑƒÐ´ÐµÑ‚ Ð¾Ñ‚крываться Ñ€ÐµÐ´Ð°ÐºÑ‚ор. Ð˜Ð·Ð¼ÐµÐ½Ð¸Ð¼ 

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

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

 

                                

<

TextBlock

 Text

="{

Binding

 Count

,

 Mode

=TwoWay}"

 

FontWeight

="Bold"

 Margin

="10,0"/>

 

                                

<

TextBlock

 Text

="шт" />

 

                            

</

StackPanel

>

 

                        

</

StackPanel

>

 

                    

</

Border

>

 

                

</

DataTemplate

>

 

            

</

ListView.ItemTemplate

>

 

        

</

ListView

>

 

         
        

<

ContentControl

 Grid.Column

="1"

 Content

="{

Binding

 BooksList

}">

 

            

<

ContentControl.ContentTemplate

>

 

                

<

DataTemplate

>

 

                    

<

Border

 BorderBrush

="Bisque"

 BorderThickness

="1"

 Margin

="10">

 

                        

<

StackPanel

 Margin

="10">

 

                            

<

TextBlock

 Text

="Название:" />

 

                            

<

TextBox

 Text

="{

Binding

 Title

,

 

UpdateSourceTrigger

=PropertyChanged}"

 Margin

="0,0,0,10"/>

 

 
                            

<

TextBlock

 Text

="Автор:"/>

 

                            

<

TextBox

 Text

="{

Binding

 Author

,

 

UpdateSourceTrigger

=PropertyChanged}"

 Margin

="0,0,0,10"/>

 

 
                            

<

StackPanel

 Orientation

="Horizontal">

 

                                

<

Button

 Content

="Выдать"

 Command

="{

Binding

 

GiveItemCommand

}"

 Margin

="10,0" />

 

                                

<

Button

 Content

="Забрать"

 Command

="{

Binding

 

GetItemCommand

}"

 Margin

="10,0" />

 

                            

</

StackPanel

>

 

                        

</

StackPanel

>

 

                    

</

Border

>

 


background image

                

</

DataTemplate

>

 

            

</

ContentControl.ContentTemplate

>

 

        

</

ContentControl

 UpdateSourceTrigger=PropertyChanged Ð²  ÑÑ‚роке  Ð±Ð¸Ð½Ð´Ð¸Ð½Ð³Ð°.  Ð­Ñ‚о  Ð·Ð½Ð°Ñ‡Ð¸Ñ‚, 

что  Ð»ÑŽÐ±Ð¾Ðµ  Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ,  Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ð¼Ð¾Ðµ  Ð²  Ð´Ð°Ð½Ð½Ð¾Ð¼  Ð¿Ð¾Ð»Ðµ,  Ð±ÑƒÐ´ÐµÑ‚  Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾ 
отражаться Ð½Ð° источнике: 

 

Если  ÑÑ‚Ð¾Ð³Ð¾  Ð½Ðµ  Ð½Ð°Ð¿Ð¸ÑÐ°Ñ‚ÑŒ,  Ð¸ÑÑ‚очник  Ð±ÑƒÐ´ÐµÑ‚  Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑ‚ься  Ñ‚олько  Ð¿Ð¾ 

окончании Ñ€ÐµÐ´Ð°ÐºÑ‚ирования (т.е. ÐºÐ¾Ð³Ð´Ð° ÐºÐ¾Ð½Ñ‚рол Ð±ÑƒÐ´ÐµÑ‚ Ñ‚ерять Ñ„окус). Ð­Ñ‚о Ð¼Ð¾Ð¶ÐµÑ‚ 
привести  Ðº  ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐ¹  Ð¾ÑˆÐ¸Ð±ÐºÐµ  Ð¸Ð½Ñ‚ерфейса:  ÐºÐ¾Ð³Ð´Ð°  Ð½Ð°Ð¶Ð¸Ð¼Ð°ÐµÑˆÑŒ  "Сохранить", 
сохраняется все, ÐºÑ€Ð¾Ð¼Ðµ только Ñ‡Ñ‚о Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ. 

Команды 

Пусть  Ð½ÐµÐºÐ¸Ðµ  Ñ‡Ð¸Ñ‚атели  Ð±ÐµÑ€ÑƒÑ‚  ÐºÐ½Ð¸Ð³Ð¸  Ð¸  Ð²Ð¾Ð·Ð²Ñ€Ð°Ñ‰Ð°ÑŽÑ‚.  Ð¡Ð¾Ð¾Ñ‚ветственно, 

сделаем  Ð´Ð²Ðµ  ÐºÐ½Ð¾Ð¿ÐºÐ¸  â€”  Â«Ð’ыдать»  Ð¸  Â«Ð—абрать»,  Ð¼ÐµÐ½ÑÑŽÑ‰Ð¸Ðµ  ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑÑ‚во 
имеющихся  Ð²  Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ð¸  ÐºÐ½Ð¸Ð³.  Ð•ÑÐ»Ð¸  ÐºÐ½Ð¸Ð³  Ð½Ðµ  Ð¾ÑÑ‚алось  (Count  =  0),  ÐºÐ½Ð¾Ð¿ÐºÐ° 
«Выдать» Ð´Ð¾Ð»Ð¶Ð½Ð° Ð±Ñ‹Ñ‚ÑŒ Ð½ÐµÐ°ÐºÑ‚ивной. 

В MVVM Ð½Ðµ Ð¿Ð¸ÑˆÑƒÑ‚ся Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚чики ÑÐ¾Ð±Ñ‹Ñ‚ий. Ð¤ÑƒÐ½ÐºÑ†Ð¸Ð¸, ÐºÐ¾Ñ‚орые Ð½ÑƒÐ¶Ð½Ð¾ 

выполнять ÐºÐ¾Ð½Ñ‚ролам, Ð¿Ð¸ÑˆÑƒÑ‚ся Ð²Ð¾ ViewModel Ð¸ Ð±Ð¸Ð½Ð´ÑÑ‚ся Ðº ÐºÐ¾Ð½Ñ‚ролам Ñ‚очно 
так же, ÐºÐ°Ðº Ð¿Ð¾Ð»Ñ. Только Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ся механизм ÐºÐ¾Ð¼Ð°Ð½Ð´. 

Команда Ð´Ð¾Ð»Ð¶Ð½Ð° Ð¿Ñ€ÐµÐ´ÑÑ‚авлять Ð¸Ð· ÑÐµÐ±Ñ ÑÐºÐ·ÐµÐ¼Ð¿Ð»ÑÑ€ ÐºÐ»Ð°ÑÑÐ°, Ñ€ÐµÐ°Ð»Ð¸Ð·ÑƒÑŽÑ‰ÐµÐ³Ð¾ 

интерфейс ICommand. DelegateCommand â€“  Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÑ‚ся  Ð´Ð»Ñ  Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ 
команды Ð±ÐµÐ· Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚ров Ð¸ DelegateCommand<T> â€” Ð´Ð»Ñ Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ 
с параметром типа T. 


background image

Параметры Ð¿ÐµÑ€ÐµÐ´Ð°Ð²Ð°Ñ‚ÑŒ Ð½Ðµ будем. ÐšÐ¾Ð´ ViewModel: 

BookViewModel.cs 

   

#region

 Commands 

 
        

#region

 Ð—абрать 

 
        

private

 

DelegateCommand

 getItemCommand; 

 
        

public

 

ICommand

 GetItemCommand 

        { 
            

get

 

            { 
                

if

 (getItemCommand == 

null

                { 
                    getItemCommand = 

new

 

DelegateCommand

(GetItem); 

                } 
                

return

 getItemCommand; 

            } 
        } 
 
        

private

 

void

 GetItem() 

        { 
            Count++; 
        } 
 
        

#endregion

 

 
        

#region

 Ð’ыдать 

 
        

private

 

DelegateCommand

 giveItemCommand; 

 
        

public

 

ICommand

 GiveItemCommand 

        { 
            

get

 

            { 
                

if

 (giveItemCommand == 

null

                { 
                    giveItemCommand = 

new

 

DelegateCommand

(GiveItem, CanGiveItem); 

                } 
                

return

 giveItemCommand; 

            } 
        } 
 
        

private

 

void

 GiveItem() 

        { 
            Count--; 
        } 
 
        

private

 

bool

 CanGiveItem() 

        { 
            

return

 Count > 0; 

        } 
 
        

#endregion

 

 
        

#endregion

 

    }

 


background image

Код  Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ‚ÑÑ  Ð² BookViewModel,  Ð°  Ð½Ðµ  Ð² MainViewMode.  Ð‘удем 

добавлять  ÐºÐ½Ð¾Ð¿ÐºÐ¸  Ð²  ContentControl,  DataContext-ом  ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾  ÑÐ²Ð»ÑÐµÑ‚ся 
именно BookViewModel. 

С  Ð¿ÐµÑ€Ð²Ð¾Ð¹  ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹  -  ÑÐ¾Ð·Ð´Ð°Ð»Ð¸  ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ,  Ð¸  Ð²  Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ð»Ð¸  ÐµÐ¹  Ð²  ÐºÐ°Ñ‡ÐµÑÑ‚ве 

действия  Ð¼ÐµÑ‚од GetItem,  ÐºÐ¾Ñ‚орый  Ð¸  Ð±ÑƒÐ´ÐµÑ‚  Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ‚ься  Ð¿Ñ€Ð¸  ÐµÐµ  Ð°ÐºÑ‚ивации.  Ð¡Ð¾ 
второй Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ð¸Ð½Ñ‚ереснее, Ð½Ð¾ Ñ‚оже просто. ÐŸÐ¾Ð¼Ð¸Ð¼Ð¾ Ñ‚ого, Ñ‡Ñ‚о Ð¾Ð½Ð° выполняет 
некоторое  Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ðµ,  Ð¾Ð½Ð°  ÐµÑ‰Ðµ  Ð¸  Ð¼Ð¾Ð¶ÐµÑ‚  Ð¿Ñ€Ð¾Ð²ÐµÑ€ÑÑ‚ÑŒ  Ñ  Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ 
метода CanGiveItem(), Ð¼Ð¾Ð¶ÐµÑ‚ Ð¾Ð½Ð° выполняться Ð¸Ð»Ð¸ Ð½ÐµÑ‚. 

В XAML-разметку Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ следующее 

MainView.xaml 

   
        

<

ContentControl

 Grid.Column

="1"

 Content

="{

Binding

 BooksList

}">

 

            

<

ContentControl.ContentTemplate

>

 

                

<

DataTemplate

>

 

                    

<

Border

 BorderBrush

="Bisque"

 BorderThickness

="1"

 Margin

="10">

 

                        

<

StackPanel

 Margin

="10">

 

                            

<

TextBlock

 Text

="Название:" />

 

                            

<

TextBox

 Text

="{

Binding

 Title

,

 

UpdateSourceTrigger

=PropertyChanged}"

 Margin

="0,0,0,10"/>

 

 
                            

<

TextBlock

 Text

="Автор:"/>

 

                            

<

TextBox

 Text

="{

Binding

 Author

,

 

UpdateSourceTrigger

=PropertyChanged}"

 Margin

="0,0,0,10"/>

 

 
                            

<

StackPanel

 Orientation

="Horizontal">

 

                                

<

Button

 Content

="Выдать"

 Command

="{

Binding

 

GiveItemCommand

}"

 Margin

="10,0" />

 

                                

<

Button

 Content

="Забрать"

 Command

="{

Binding

 

GetItemCommand

}"

 Margin

="10,0" />

 

                            

</

StackPanel

>

 

                        

</

StackPanel

>

 

                    

</

Border

>

 

                

</

DataTemplate

>

 

            

</

ContentControl.ContentTemplate

>

 

        

</

ContentControl

>

  

Мы  Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ð»Ð¸  Ñ‚ребуемую  Ñ„ункциональность.  ÐšÐ¾Ð»Ð¸Ñ‡ÐµÑÑ‚во  ÑÐºÐ·ÐµÐ¼Ð¿Ð»ÑÑ€Ð¾Ð² 

книги ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð²Ð°ÐµÑ‚ся Ð¸ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐ°ÐµÑ‚ся, Ð° ÐºÐ¾Ð³Ð´Ð° Ð¸Ñ… ÑÑ‚ановится 0, ÐºÐ½Ð¾Ð¿ÐºÐ° Â«Ð’ыдать» 
дизаблится (благодаря упомянутому CanGiveItem).