У вас плохой стиль написания кода. Именуйте переменные как то информативнее, без двусмысленности ProductListViewModel - это модель(Model) или представление(View).
1)
т.е получается для того чтобы изменить продукт нужны теже свойста что и при создании и одно дополнительное Id.
да, но вам не нужно клонировать свойства, просто объявите экземпляр класса или унаследуйтесь
public class ProductCreateViewModel {
public string Name { get; set; }
//... еще свойства
}
public class ProductEditViewModel {
public int Id { get; set; }
public ProductCreateViewModel productCreate
//... еще свойства
private static void CreateNewProduct(){
// здесь обрабатываете состояние
}
}
2) Наследуйстесь
public class milk{
public string nameSection { get; set; }
}
public class cheese : milk{
public string name { get; set; }
}
Просто ООП . Как то так. Может я вас не понял.