Я создаю приложение WPF
, используя модель MVVM.В рамках программы я создаю UserControl
, который содержит ItemsControl
из UserControls
с их собственными связанными моделями представления.
Код выглядит следующим образом:
List<IDataViewModel> viewModels = new List<IDataViewModel>();
foreach (var type in Enum.GetValues(typeof(DataModel)))
{
var tempVM = ViewModelLocator.Get<IDataViewModel>();
tempVM.Type = type;
viewModels.Add(tempVM);
}
IsЕсть ли способ сократить это или передать параметр как часть вызова .Get <>?
Edit
Я ушел, чтобы посмотреть на фабричный шаблонкак предложено в ответах и обновили мой код следующим образом:
Factory, Ninject-Module
public interface IViewModelFactory
{
IDataViewModel CreateDataViewModel(DataType type);
}
public class ViewModelModule : NinjectModule
{
public override void Load()
{
Bind<IDataViewModel>().To<DataViewModel>();
Bind<IViewModelFactory>().ToFactory();
}
}
И приведенный выше код становится;
foreach (var type in Enum.GetValues(typeof(DataModel)))
{
viewModels.Add(viewModelFactory.CreateDataViewModel(type));
}
Первыйвызов Factory
, кажется, работает эффективно и создает новый ViewModel
, однако последовательные вызовы не выполняются (то есть, кажется, не создают новый ViewModels
), есть что-то, что я пропускаю?Я не мог найти много онлайн и что там есть, не ясно сформулировано и содержит грамматические ошибки.Страница, на которой я получил больше всего, ничего не говорит о том, почему это происходит.Нужно ли иметь на своей фабрике несколько IDataViewModels?Примерно так:
public interface IViewModelFactory
{
IDataViewModel CreateDataViewModel1(AccountType type);
IDataViewModel CreateDataViewModel2(AccountType type);
IDataViewModel CreateDataViewModel3(AccountType type);
IDataViewModel CreateDataViewModel4(AccountType type);
}
Второе редактирование
Убедитесь, что при добавлении переменной в Factory
Interface
CreateDataViewModel(var Variable)
вы отражаете это изменениев вашем актуальном виде модель конструкторов подпись!Глупая ошибка с моей стороны!