В вашем случае для отображения списка Employee достаточно привязать коллекцию ObservableCollection к элементу списка WPF. ObservableCollection уже реализовывает интерфейсы INotifyCollectionChanged и NotifyPropertyChanged, Поэтому никакой дополнительной увязки не требуетсяhttps://
docs.microsoft.com/ru-ru/dotnet/api/system.collect...
ObservableCollection можно использовать в чистом виде
А вот если хотите чтобы при изменении свойств класса Employee в интерфейсе обновлялась информация тогда нужно в классе Employee реализовать интерфейс NotifyPropertyChanged.
В вашем случае чтобы увязать ViewModel с WPF достаточно привязать коллекцию к спискам:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded" >
<Grid>
<ListBox x:Name="listbox1" DisplayMemberPath="Name">
</ListBox>
</Grid>
</Window>
public partial class MainWindow : Window
{
private MainViewModel viewModel = new MainViewModel();
public MainWindow()
{
InitializeComponent();
//добавляем сотрудников
viewModel.Employees.Add(new Employee() {Name="Иванов Иван" });
viewModel.Employees.Add(new Employee() { Name = "Петров Петр" });
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//привязываем viewModel (необязательно для отображения списка)
this.DataContext = viewModel;
//привязываем коллекцию
this.listbox1.ItemsSource = viewModel.Employees;
}
}
Класс Tree в случае реализации необходимых интерфейсов можно использовать вместо класса ObservableCollection.
Подробнее можете посмотреть здесь
https://metanit.com/sharp/wpf/22.2.php