使用caliburn.micro显示2个ViewModel

时间:2019-05-09 13:19:39

标签: c# caliburn.micro

我希望同时在屏幕上显示2个控件,并允许它们彼此独立地转换。我正在使用Conductor.Collection.AllActive,但无法弄清楚如何使List控件(一个名为ProductListViewModel的屏幕)和详细信息屏幕(ProductViewModel)同时显示在外壳中。

如何使它们加载到适当的ContentControl中?

    <mah:TransitioningContentControl Grid.Row="2" Grid.Column="1" 
        Margin="5"                             
        x:Name="NavigationFrame"/>

    <mah:TransitioningContentControl Grid.Row="2" Grid.Column="2" Margin="5" 
        x:Name="ContentFrame" />

1 个答案:

答案 0 :(得分:0)

我发现并认为它实际上非常简单。 ViewModel在您要在其中放置独立视图的每个内容区域都需要一个IScreen属性。

在这种情况下,应该是

public class ShellViewModel: Screen
{
    private string _title = "Some title";
    private Conductor<IScreen> _listConductor;
    private Conductor<IScreen> _detailConductor;

    public ShellViewModel()
    {
        _listConductor = new Conductor<IScreen>();
        _detailConductor = new Conductor<IScreen>();

        ListFrame = GetContainer().Resolve<ProductListViewModel>();
        DetailFrame = GetContainer().Resolve<ProductViewModel>();
    }

    public string Title { get => _title; set => _title = value; }

    public IScreen ListFrame
    {
        get { return _listConductor.ActiveItem; }
        set {
            _listConductor.ActivateItem(value);
            NotifyOfPropertyChange(nameof(ListFrame));
        }
    }

    public IScreen DetailFrame
    {
        get { return _detailConductor.ActiveItem; }
        set {
            _detailConductor.ActivateItem(value);
            NotifyOfPropertyChange(nameof(DetailFrame));
        }
    }