Ну первое что приходит в голову, это использовать git
Вы просто выполняете команды git команды где-то у себя в программуле
К примеру, вам нужно сделать бэкап в программе и вы делаете что-то типа
ProcessStartInfo psi;
psi = new ProcessStartInfo("cmd", $"git commit -a -m { backup_name }");
Process.Start(psi);
Можно будет просматривать через diff изменения
Через .gitignore настроить отслеживаемые файлы
По-моему очень здравое решение
Можешь просто сделать в конструкторе
DataContext = this;
Потом чтобы твой Window реализовал INotifyPropertyChanged(возможно ошибка в названии)
Далее например для Z
private int _z;
public int Z {
get => _z;
set{
_z = value;
OnPropertyChanged(nameof(Z));
} }
И прибиндить <TextBox Text ="{Binding Z}" />
Не очень красиво, но чтобы не заморачиваться и просто поюзать какие-то штуки в впф подойдет, а в дальнейшем и правда нужно смотреть на mvvm и вот это всё выносить в ViewModel