IMI docs

Trace:

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
mvvm [2019/01/11 13:04]
yura
mvvm [2019/01/13 12:01] (current)
yura
Line 1: Line 1:
-**''​MVVM Pattern - Реалізація патерна''​**+**''​MVVM Pattern - Реалізація патерна''​** ​
 ---- ----
 **Лейбли** and **Binding** в XAML  __(в XAML забіндити можна все що завгодно!)__ **Лейбли** and **Binding** в XAML  __(в XAML забіндити можна все що завгодно!)__
 <​Code:​csharp>​ <​Code:​csharp>​
-Foreground="​Red" ​                        ​Міняє колір вмісту +Foreground="​Red" ​                                            ​Міняє колір вмісту 
-FontSize="​50" ​                           Величена вмісту +FontSize="​50" ​                                               Величена вмісту 
-FontFamily="​Segoe UI" ​                   Які шрифти будуть використані +FontFamily="​Segoe UI" ​                                       Які шрифти будуть використані 
-Content="​{Binding Time}" ​                ​Бінд який падає в клас StopwatchViewModel ​ з інтерфейсом  ​INotifyPropertyChanged +HorizontalContentAlignment="​Center" ​                         Вірівнення по ширині 
-HorizontalContentAlignment="Center" ​     ​Вірівнення по ширині +VerticalContentAlignment="​Center" ​                           Вірівнення по висоті 
-VerticalContentAlignment="Center" ​       Вірівнення по висоті +Margin="​0,​ 0, 0, -200" ​                                      ​Зсунути в низ на 200 px 
-</​Code>​+Content="​{Binding Time}" ​                                    ​Бінд який падає в клас StopwatchViewModel ​INotifyPropertyChanged 
 +Content="{Binding Time, TargetNullValue='​00.00 UAH'}" ​       ​TargetNullValue ​виводить введений текст зразу ​на екран (в деф ​позицію) 
 + 
 +Command="{Binding StartStopwatch}" ​                          Біндить якусь дію (в нашому випадку це кнопка) 
 +</​Code> ​ 
 <​Code:​xaml>​ <​Code:​xaml>​
 <Label Content="​{Binding Time}" Foreground="​Red"​ FontFamily="​Segoe UI" FontSize="​50"​ VerticalContentAlignment="​Center"​ ></​Label>​ <Label Content="​{Binding Time}" Foreground="​Red"​ FontFamily="​Segoe UI" FontSize="​50"​ VerticalContentAlignment="​Center"​ ></​Label>​
Line 41: Line 45:
     * При виклику timer.startstopWatch();​ запускає DispatcherTimer ​ і Stopwatch ​ (тому що в конструкторі НЕ ПРИПУСТИМО робити запуск програми)     * При виклику timer.startstopWatch();​ запускає DispatcherTimer ​ і Stopwatch ​ (тому що в конструкторі НЕ ПРИПУСТИМО робити запуск програми)
  
 +----
 +**Бінд кнопки виглядає наступним чином**
 +<​Code:​csharp>​
 +<Button Content="​Click"​ Command="​{Binding StartStopwatch}"​ Width="​100"​ Height="​25"​ HorizontalContentAlignment="​Center"​ Margin="​0,​ 0, 0, -200"></​Button>​
 +</​Code>​
 +
 +
 +**Реалізація класу ButtonCommand через інтерфейс ICommand**
 +<​Code:​csharp>​
 +namespace CounterSalary.ViewModel
 +{
 +    public class ButtonCommand : ICommand
 +    {
 +        private readonly Action action;
 +        public event EventHandler CanExecuteChanged;​
 +
 +        public ButtonCommand(Action action)
 +        {
 +            this.action = action;
 +        }
 +
 +        public bool CanExecute(object parameter)
 +        {
 +            return true;
 +        }
 +
 +        public void Execute(object parameter)
 +        {
 +            action();
 +        }
 +    }
 +}
 +
 +</​Code>​
 +**Робиться для того щоб потім можна було його реалізувати через моделі** 👇👇👇
 +<​Code:​csharp>​
 +        public ButtonCommand StartStopwatch { get; set; } = new ButtonCommand(() =>
 +        {
 +            _timer.startStopwatch();​
 +        });
 +</​Code>​
 ---- ----
 **Даємо івенти на nameof** - будь це хоч Margin хоч Context __(Це один з методів реалізування Біндінгів)__ **Даємо івенти на nameof** - будь це хоч Margin хоч Context __(Це один з методів реалізування Біндінгів)__