#c# #wpf #mvvm #mvvm-light
#c# #wpf #mvvm #mvvm-light
Вопрос:
У меня есть ViewModel SupplierViewModel, я устанавливаю datacontext моего представления для этой ViewModel в XAML, используя MVVM lights экземпляр ViewModelLocator.
Вот мое мнение :
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
x:Class="RH_Maize.SupplierView"
x:Name="UserControl"
d:DesignWidth="1040"
d:DesignHeight="630"
DataContext="{Binding Supplier, Source={StaticResource Locator}}">
<!--UI elements goes here-->
</UserControl>
Вот мой локатор ViewModel :
public class ViewModelLocator
{
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
if (ViewModelBase.IsInDesignModeStatic)
{
SimpleIoc.Default.Register<ISupplierDataService, SupplierDataServiceMock>();
}
else
{
SimpleIoc.Default.Register<ISupplierDataService, SupplierDataService>();
}
}
#region Here we create and expose some of the applications viewModels
/// <summary>
/// Gets the Main property.
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
"CA1822:MarkMembersAsStatic",
Justification = "This non-static member is needed for data binding purposes.")]
public MainViewModel Main
{
get
{
return SimpleIoc.Default.GetInstance<MainViewModel>();
}
}
public SupplierViewModel Supplier
{
get
{
return new SupplierViewModel();
}
}
}
/// <summary>
/// Cleans up all the resources.
/// </summary>
public static void Cleanup()
{
}
}
ViewModel :
public class SupplierViewModel : WorkspaceViewModel,IDataErrorInfo
{
#region Fields
readonly Supplier _supplier;
readonly SupplierRepository _supplierRepository;
private IDialogService _dialogService;
#endregion //Fields
#region Constructor
public SupplierViewModel(Supplier supplier, SupplierRepository supplierRepository, IDialogService service)
{
_supplier = supplier;
_supplierRepository = supplierRepository;
_dialogService = service;
}
#endregion //Constructor
}
Моя проблема:
Как мне разрешить все эти зависимости?
Как я могу заполнить данные о времени проектирования в пользовательском интерфейсе, я знаю, для поддержки данных о времени разработки в представлении, в котором мне нужен конструктор без параметров в моей ViewModel?
Комментарии:
1. Вы можете связать свой конструктор без параметров с «реальным» конструктором, используя заглушки.
2. @GayotFow, что здесь означает заглушки, будут ли у вас примеры
3. Для целей времени разработки создайте конструктор без параметров. И связать его с другим конструктором, используя поддельный поставщик, поддельный SupplierRepository и так далее. Заглушки.