Strona główna TECH .Net XAML Power Toys – generator widoku XAML

XAML Power Toys – generator widoku XAML

0
XAML Power Toys – generator widoku XAML

W dzisiejszym poście przyglądniemy się dość ciekawej wtyczce rozszerzającej możliwości Visual Studio.

XAML Power Toys jest generatorem widoków, który automatycznie tworzy kod XAML na podstawie wcześniej przygotowanego view-model-u. Siłą rzeczy, skorzystamy z niego najlepiej stosując w naszej aplikacji wzorzec MVVM, chociaż nie jest to oczywiście warunek konieczny.

Wtyczka, w swoim założeniu, ma zdjąć z nas żmudną część pisania XAML-a pozostawiając nam jedynie kwestie związane z jego stylizowaniem i drobnymi korektami.

Wtyczkę zainstalujemy w VS2015, VS2017 i VS2019 za pomocą Manage Extensions:

Przetestujemy wtyczkę w projekcie WPF-owym. Spróbujmy więc teraz stworzyć sobie solucję WPF i stworzyć jakiś testowy view-model dla naszego widoku:

class TestViewModel : INotifyPropertyChanged
{
        public event PropertyChangedEventHandler PropertyChanged;
        private string _name;
        private string _surname;
        private string _emailAddress;
        private int _age;
        private bool _isRegistered;
        public string Name
        {
            get => _name;
            set
            {
                _name = value;
                OnPropertyChanged();
            }
        }
        public string Surname
        {
            get => _surname;
            set
            {
                _surname = value;
                OnPropertyChanged();
            }
        }
        public string EmailAddress
        {
            get => _emailAddress;
            set
            {
                _emailAddress = value;
                OnPropertyChanged();
            }
        }
        public int Age
        {
            get => _age;
            set
            {
                _age = value;
                OnPropertyChanged();
            }
        }
        public bool IsRegistered
        {
            get => _isRegistered;
            set
            {
                _isRegistered = value;
                OnPropertyChanged();
            }
        }
        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
}

Zanim skorzystamy z dobrodziejstw XAML Power Toys musimy zbudować projekt. Podobnie należy postąpić przy jakiejkolwiek zmianie w view-model. XAML Power Toys wykorzystuje mechanizm reflekcji aby uzyskać meta dane o modelach i view-modelach a następnie wykorzystać je do prezentacji opcji możliwych do wykorzystania przy generowaniu widoku.

To co musimy teraz zrobić, to wewnątrz pustego widoku XAML wcisnąć prawy przycisk myszy i z menu podręcznego wybrać pozycję Xaml Power Toys.

Uruchomimy w ten sposób kreator, który pozwoli nam najpierw wybrać klasę zawierającą nasz view-model:

Następnie, w kolejnym oknie kreatora, wybieramy propercje naszego view-modelu, które chcemy wykorzystać w naszej formie i ustawiamy parametry:
Otrzymamy w ten sposób wygenerowany podstawowy widok w kodzie XAML, dodatkowo opakowany w ramkę jeżeli zaznaczyliśmy taką opcję.
<Border BorderThickness="1" BorderBrush="Gray" Padding="10" CornerRadius="10">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>
                <TextBlock Text="XPowerToysTest" />
                <Grid Grid.Row="1">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="85"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Label Content="Name" />
                    <TextBox Text="{Binding Path=Name, Mode=TwoWay, ValidatesOnDataErrors=True, ValidatesOnNotifyDataErrors=True, ValidatesOnExceptions=True}" Grid.Column="1" Grid.Row="0" x:Name="name" />
                    <Label Content="Surname" Grid.Row="1" />
                    <TextBox Text="{Binding Path=Surname, Mode=TwoWay, ValidatesOnDataErrors=True, ValidatesOnNotifyDataErrors=True, ValidatesOnExceptions=True}" Grid.Column="1" Grid.Row="1" x:Name="surname" />
                    <Label Content="Age" Grid.Row="2" />
                    <TextBox Text="{Binding Path=Age, Mode=TwoWay, ValidatesOnDataErrors=True, ValidatesOnNotifyDataErrors=True, ValidatesOnExceptions=True}" Grid.Column="1" Grid.Row="2" x:Name="age" />
                    <Label Content="Email Address" Grid.Row="3" />
                    <TextBox Text="{Binding Path=EmailAddress, Mode=TwoWay, ValidatesOnDataErrors=True, ValidatesOnNotifyDataErrors=True, ValidatesOnExceptions=True}" Grid.Column="1" Grid.Row="3" x:Name="emailAddress" />
                    <Label Content="Is Registered" Grid.Row="4" />
                    <CheckBox IsChecked="{Binding Path=IsRegistered, Mode=TwoWay}" Grid.Column="1" Grid.Row="4" x:Name="isRegistered" />
                </Grid>
            </Grid>
        </Border>

I to w zasadzie wszystko. Tylko tyle i aż tyle.

Rozbudowany opis można znaleźć pod adresem: https://oceanware.wordpress.com/xaml-power-toys/

Czy to się przydaje ?

Odpowiedź, jak zwykle, brzmi – to zależy. Przy złożonych formach, z dużą ilością kontrolek szybciej wygenerujemy w ten sposób czysty XAML niż pisząc go ręcznie. Potem bawimy się jedynie w korekty layoutu i stylizowanie.
Wtyczka działa tak samo dobrze w przypadku WPF jak i Xamarin Forms. W przypadku Xamarin-a w kreatorach dostępne są nieco inne opcje.
W przypadku form zawierających stosunkowo niewiele kontrolek, ale za to o dość złożonym układzie wygodniej chyba jednak napisać XAML-a ręcznie.

ZOSTAW ODPOWIEDŹ

Proszę wpisać swój komentarz!
Proszę podać swoje imię tutaj