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:
<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.