Я получаю смешанные ответы, просматривая другие сообщения, но говорю, что у меня есть одна основная ViewModel, которая обрабатывает две связанные модели данных
public partial class Product
{
public string ProductName { get; set; }
public int TemplateID { get; set; }
public virtual Template Template { get; set; }
}
public Template()
{
this.Products = new ObservableCollection<Product>();
}
public int TemplateID { get; set; }
public string TemplateName { get; set; }
public virtual ObservableCollection<Product> Products { get; set; }
}
В настоящее время есть две отдельные модели Views и ViewModels, одна из которых показывает все данные "byTemplates", а другая - все данные "byProducts". Оба разрешают операции CRUD. Чтобы избавиться от дубликатов кодов и команд, я хочу объединить эти два вида в один.
Должен ли я по-прежнему требовать две ViewModels? Могу ли я работать с одним экземпляром данных? (поэтому, если я пошел и вставил что-то под представлением "ByTemplates" и переключился на "ByProducts" перед сохранением в базе данных, я все равно увижу все изменения, которые у меня есть?
РЕДАКТИРОВАТЬ:
В настоящее время я использую вкладки, чтобы облегчить это. Мои взгляды здесь:
По вкладке продукта
Вкладка "Шаблоны" (пользователь может выбрать шаблон, а "Ассоциированные продукты" ListView покажет все prodcucts, связанные с "шаблоном")
Я хотел бы использовать единую модель просмотра, где оба представления взаимосвязаны. Примером может быть подробное и сводное представление одних и тех же данных.
В описываемом вами сценарии, если оба представления используют одни и те же данные и методы, то уверены, сохраняйте их как одну модель. Если, однако, вы выполняете параметризацию каждой команды для работы над подмножеством, то кажется, что разделение будет лучше - я бы хотел сделать это, основывая общие элементы для улучшения повторного использования и обслуживания, а затем расширяя их до определенных моделей просмотра для каждого подмножества. Это также улучшает расширение.
То, что вы говорите, в значительной степени возможно, viewmodel может содержать несколько моделей, объединенных вместе, как одну родительскую модель просмотра, и она предназначена для просмотра всех свойств, с которыми она заинтересована в привязке. Наличие двух отдельных представлений или нет - это обсуждение дизайна, но оно не является обязательным. Для этого не требуется одна модель просмотра. Цель иметь модель просмотра - избавиться от прямой зависимости от конкретной бизнес-модели и объединить и сформировать данные в соответствии с потребностями пользовательского интерфейса. Так что да, вы можете делать то, что вы намереваетесь сделать. Пожалуйста, поделитесь деталями xaml и существующей моделью /viewmodel, если вы хотите подробно рассказать о том, как это сделать, иначе вы все настроены.
UserControl
способный управлять обоими, но трудно сказать без дополнительной информации.