控件:TabControlView 是一个可重用的组件。我需要能够为每个组件使用创建一个ViewModel /检索它的实例。
<UserControl x:Class="App.Views.Shell.ShellView" ...>
<StackPanel Orientation="Vertical">
<controls:TabControlView cal:Bind.Model="{Binding TabControlViewModel}"/>
</StackPanel>
</UserControl>
在ShellViewModel构造函数中:
public TabControlViewModel TabControlViewModel { get; set; }
public ShellViewModel(){
TabControlViewModel = new TabControlViewModel();//For simplicity. It is resolved by IoC
}
当我在TabControlViewModel的构造函数中添加一个断点时,我可以看到它被调用了2次。
当我设置IoC以将TabControlViewModel解析为单例时,它可以正常工作(因为解析TabControlViewModel的内部调用是在同一个实例中提供的)。
我应该如何编辑我的代码,以免它自动调用BootstrapperBase.GetInstance()或如何替换View的ViewModel?
答案 0 :(得分:1)
我发现,当Caliburn解析ViewModel时,它会自动注入属性:
public TabControlViewModel TabControlViewModel { get; set; }
我需要做的就是让它成为必要的并在那里设置手工实例:
private TabControlViewModel _tabControlViewModel;
public TabControlViewModel TabControlViewModel
{
get { return _tabControlViewModel; }
set
{
_tabControlViewModel = value;
//Init here
NotifyOfPropertyChange(() => TabControlViewModel);
}
}