Caliburn.Micro将已解析的ViewModel实例分配给来自父级的子级

时间:2015-08-19 12:18:01

标签: c# caliburn.micro

控件: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?

1 个答案:

答案 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);
    }
}