在我编写的示例应用程序中,我创建了一个由视图实现的界面。该接口有 1 个成员,SetViewModel。此方法接受一个对象,即 ViewModel。ViewModel 为 View 提供了绑定和处理命令的位置。
public interface IDemoView
{
void SetViewModel(object viewModel);
}
这个接口在实际视图中的实现是这样的:
public partial class DemoView : UserControl, IDemoView
{
public DemoView()
{
InitializeComponent();
}
public void SetViewModel(object viewModel)
{
DataContext = viewModel;
}
}
View 的构造函数保持默认,代码隐藏中唯一的代码就是这个 SetViewModel 方法。
在 ViewModel 类的构造函数中,它调用此方法并将自身传递给视图。
public IDemoView View { get; private set; }
private IDemoModel _model;
public DemoViewModel( IDemoView view, IDemoModel model)
{
_model = model;
View = view;
View.SetViewModel(this);
}
Module 类中的 initialize 方法向 UnityContainer 注册类型并将视图添加到区域
public void Initialize()
{
_container.RegisterType<IDemoView, DemoView>();
_container.RegisterType<IDemoModel, DemoModel>();
_container.RegisterType<IDemoViewModel, DemoViewModel>();
var viewModel = _container.Resolve<IDemoViewModel>();
_regionManager.Regions["MainRegion"].Add(viewModel.View);
}