我有一个viewModel SupplierViewModel我通过使用MVVM灯ViewModelLocator实例将我的视图的datacontext设置为XAML中的viewModel。
这是我的观点:
<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
}
我的问题:
如何解决所有这些依赖关系?
我知道如何在UI上填充设计时间数据以支持视图中的设计时数据我想在viewModel中使用无参数构造函数?