Create a custom data type in python. Create methods to represent the logic side of the application
class AccessLevel(object):
def __init__(self, name):
self.name = name
class Employee(object):
def __init__(self, name, age, access_levels):
self.name = name
self.age = age
self.access_levels = access_levels
def get_employees():
pass
Define ViewModels for data
# define VM for employee and resolve the image file into a bitmapimage for WPF
# cleanup the casing for name in VM as another example why we might need VMs
class EmployeeVM(object):
pass
Define a ViewModel for application. List of employees and the selected employee information
List control to select employee from the list and show info
(Bind list SelectedItem
→ card DataContext
with no convertors)
Beautify the employee list and card. Use templating to show employee levels as tags with colors.
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="TS">
<Setter TargetName="itemborder" Property="Background" Value="Black" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="GAMMA">
<Setter TargetName="itemborder" Property="Background" Value="Red" />
</DataTrigger>
</DataTemplate.Triggers>
Use templating to create a list of employee photos. Card shows info for each selected employee
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True"/>
</ItemsPanelTemplate>
<ControlTemplate>
<Border VerticalAlignment="Center">
<Image Height="100" Source="{Binding item}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
Implement one-way and two-way reactivity
class Reactive(ComponentModel.INotifyPropertyChanged):
"""WPF property updator base mixin"""
PropertyChanged, _propertyChangedCaller = pyevent.make_event()
def add_PropertyChanged(self, value):
self.PropertyChanged += value
def remove_PropertyChanged(self, value):
self.PropertyChanged -= value
def OnPropertyChanged(self, prop_name):
if self._propertyChangedCaller:
args = ComponentModel.PropertyChangedEventArgs(prop_name)
self._propertyChangedCaller(self, args)
Use pyrevit.forms
to simplify reactivity