这个 viewModel 是如何创建的?
How is this viewModel being created?
我这里有一个简单的应用程序,但我不确定我的 ViewModel 是如何创建的。我假设它来自统一容器,但我不确定和好奇。该模块初始化视图并将其注册到该区域。视图背后的代码在其构造函数中初始化了 ViewModel,并且 ViewModel 调用了一些先前注册的服务。
我的问题是,当我从未在统一容器中注册 ViewModel 类型时,如何在 View 的代码中创建 ViewModel? RegisterViewWithRegion 方法中是否发生了一些神奇的事情?
AlarmsModule.cs:这只是将视图注册到区域
[Module(ModuleName = "AlarmsModule")]
public class AlarmsModule : IModule
{
[Dependency]
public IRegionManager regionManager { get; set; }
public void Initialize()
{
regionManager.RegisterViewWithRegion("AlarmsRegion", typeof(AlarmPanel.View));
}
}
View.xaml.cs:
public partial class View : UserControl
{
public View(ViewModel vm)
{
InitializeComponent();
DataContext = vm;
}
}
ViewModel.cs
public class ViewModel: DependencyObject
{
IEventAggregator _eventAggregator;
public ObservableCollection<IAlarmContainer> AlarmList { get; set; }
IAlarmService _alarmService;
public ViewModel(IAlarmService alarmService)
{
//Adding an alarm from the alarm service, which is injected into this viewModel
AlarmList = alarmService.AlarmList;
}
}
视图模型由统一容器在 UnityServiceLocatorAdapter
class 的 DoGetInstance
方法中创建,在 Prism.Unity 程序集中依次由 RegisterViewWithRegion
方法通过 RegionViewRegistry
class.
的一些其他方法
Unity 能够自动解析视图模型类型,前提是它具有默认的无参数构造函数。
您可以使用以下代码自行验证:
var view = unityContainer.Resolve(typeof(View), null); //will automatically resolve the view model type and inject the view with an instance of it
我这里有一个简单的应用程序,但我不确定我的 ViewModel 是如何创建的。我假设它来自统一容器,但我不确定和好奇。该模块初始化视图并将其注册到该区域。视图背后的代码在其构造函数中初始化了 ViewModel,并且 ViewModel 调用了一些先前注册的服务。
我的问题是,当我从未在统一容器中注册 ViewModel 类型时,如何在 View 的代码中创建 ViewModel? RegisterViewWithRegion 方法中是否发生了一些神奇的事情?
AlarmsModule.cs:这只是将视图注册到区域
[Module(ModuleName = "AlarmsModule")]
public class AlarmsModule : IModule
{
[Dependency]
public IRegionManager regionManager { get; set; }
public void Initialize()
{
regionManager.RegisterViewWithRegion("AlarmsRegion", typeof(AlarmPanel.View));
}
}
View.xaml.cs:
public partial class View : UserControl
{
public View(ViewModel vm)
{
InitializeComponent();
DataContext = vm;
}
}
ViewModel.cs
public class ViewModel: DependencyObject
{
IEventAggregator _eventAggregator;
public ObservableCollection<IAlarmContainer> AlarmList { get; set; }
IAlarmService _alarmService;
public ViewModel(IAlarmService alarmService)
{
//Adding an alarm from the alarm service, which is injected into this viewModel
AlarmList = alarmService.AlarmList;
}
}
视图模型由统一容器在 UnityServiceLocatorAdapter
class 的 DoGetInstance
方法中创建,在 Prism.Unity 程序集中依次由 RegisterViewWithRegion
方法通过 RegionViewRegistry
class.
Unity 能够自动解析视图模型类型,前提是它具有默认的无参数构造函数。
您可以使用以下代码自行验证:
var view = unityContainer.Resolve(typeof(View), null); //will automatically resolve the view model type and inject the view with an instance of it