Caliburn Micro Screen派生视图模型支持子视图模型?

时间:2014-12-12 16:00:55

标签: windows-runtime caliburn.micro

使用Caliburn Micro v2是否可以在屏幕内组合视图模型,以便子视图模型获得OnInitialize,OnActivate()和OnDeactivate(bool)调用?

我有类似以下用于显示屏幕的视图模型WidgetsViewModel

public class WidgetsViewModel : Screen, IHandle<WidgetUpdateEvent>
{
    public ObservableCollection<WidgetSummaryViewModel> Widgets { get; set; }
...
    public void Handle(WidgetUpdateEvent theEvent)
    {
        // Update the specific widget in Widgets collection
    }
}

public class WidgetSummaryViewModel
{
    public int Counter { get; set; }
}

我想将WidgetUpdateEvent的处理移到WidgetSummaryViewModel,让它更舒服。像这样:

public class WidgetSummaryViewModel : IHandle<WidgetUpdateEvent>
{
    public int Counter { get; set; }
    public WidgetSummaryViewModel(IEventAggregator theEventAggregator)
    {
        theEventAggregator.Subscribe(this);
    }

    public void Handle(WidgetUpdateEvent theEvent)
    {
        // Update this view model...
    }
}

让我感到不舒服的是在视图模型构造函数中调用Subscribe。如果屏幕能够像Screen派生的视图模型那样为我调用OnInitialize,OnActivate和OnDeactivate会好得多。有没有办法在基于屏幕派生的视图模型中组合子视图模型?

1 个答案:

答案 0 :(得分:1)

  1. WidgetsViewModel成为指挥:

    public class WidgetsViewModel : Conductor<WidgetSummaryViewModel>.Collection.AllActive
    {
    }
    
  2. WidgetsView中更新数据绑定:

    {Binding Items} instead of {Binding Widgets}
    
  3. WidgetSummaryViewModel导出Screen并覆盖您需要的所有方法。

  4. 有关指挥的更多信息,请访问Screens, Conductors and Composition