gpt4 book ai didi

c# - 这个 viewModel 是如何创建的?

转载 作者:行者123 更新时间:2023-12-03 11:03:32 25 4
gpt4 key购买 nike

我在这里有一个简单的应用程序,但我不确定我的 ViewModel 是如何创建的。我假设它来自统一容器,但我不确定和好奇。该模块将 View 初始化并注册到区域。 View 背后的代码在其构造函数中初始化了 ViewModel,并且 ViewModel 调用了之前注册的一些服务。

我的问题是,当我从未在统一容器中注册 ViewModel 类型时,如何在 View 的代码中创建 ViewModel? RegisterViewWithRegion 方法中是否发生了一些神奇的事情?

AlarmsModule.cs:这只是将 View 注册到区域

[Module(ModuleName = "AlarmsModule")]
public class AlarmsModule : IModule
{
[Dependency]
public IRegionManager regionManager { get; set; }

public void Initialize()
{

regionManager.RegisterViewWithRegion("AlarmsRegion", typeof(AlarmPanel.View));

}

}

查看.xaml.cs:
 public partial class View : UserControl
{
public View(ViewModel vm)
{
InitializeComponent();
DataContext = vm;
}
}

View 模型.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;
}
}

最佳答案

View 模型由 DoGetInstance 中的统一容器创建。 UnityServiceLocatorAdapter 的方法Prism.Unity 程序集中的类,它又由 RegisterViewWithRegion 调用方法通过RegionViewRegistry的一些其他方法类(class)。

Unity 能够自动解析 View 模型类型,前提是它具有默认的无参数构造函数。

您可以使用以下代码自己验证这一点:

var view = unityContainer.Resolve(typeof(View), null); //will automatically resolve the view model type and inject the view with an instance of it

关于c# - 这个 viewModel 是如何创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41961323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com