Хорошо. MVVM может быть немного пугающим при первой попытке, поэтому вот несколько указателей.
Созданные вами классы на самом деле являются моделью данных.
Вы должны пытаться и размещать только необходимый код поддерживать представление в его коде позади.
Программные логи c, такие как создание экземпляров класса Model и их настройка, должны выполняться внутри ViewModel, которая случайно реализует материал INotifyPropertyChanged.
Кстати, часто есть серая область вокруг необходимости отдельных классов Model и ViewModel.
Ваше представление должно иметь свойства Binding to ViewModel для данных и экземпляры ICommand для выполнения таких действий, как запуск определенного кода, например, json serialization.
В вашей ViewLodel SkinList должна быть ObservableCollection of Skins .
Лично я бы выделил свои классы так, чтобы они не были встроены друг в друга, поместил бы каждый в свой собственный файл.
Каждый класс должен иметь возможность создавать, удалять и иметь выбранный экземпляр класса, который он содержит в списке - это упростит связывание в XAML. например,
Не бойтесь реализовать ObservableCollections ViewModels или поместить ViewModels в ViewModels - задайте себе этот вопрос, хотите ли вы самостоятельно просмотреть местоположение, обложку или координату?
Если вы рассматривают возможность отображения нескольких скинов и расположений в одном пользовательском представлении, может ли это быть лучше всего достигнуто при наличии нескольких представлений в представлении или нескольких пользовательских пользовательских элементов управления в представлении?
Например, вы ищете наличие представления, которое имеет несколько слоев скинов на дисплее или только один?
edit
Самый простой способ передать координаты щелчка мышью обратно в ViewModel - использовать код захватить его и передать (вы можете сделать это через связывание в XAML, это немного сложнее).
ViewModel - это BindingContext представления (страницы) (это может быть установлено в XAML или в коде позади). В коде он обычно передается через конструктор.
Затем вы должны ссылаться на это с помощью вашего обработчика Image_MouseLeftButtonDown_1 и вызывать команду, передавая координаты в качестве параметра команды.
Использование ICommands и привязки помогает отсоединить интерфейс пользователя и программный код таким образом, чтобы они также могли работать в разных потоках, поддерживая отзывчивость вашего интерфейса.