使用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会好得多。有没有办法在基于屏幕派生的视图模型中组合子视图模型?
答案 0 :(得分:1)
让WidgetsViewModel
成为指挥:
public class WidgetsViewModel : Conductor<WidgetSummaryViewModel>.Collection.AllActive
{
}
在WidgetsView
中更新数据绑定:
{Binding Items} instead of {Binding Widgets}
从WidgetSummaryViewModel
导出Screen
并覆盖您需要的所有方法。
有关指挥的更多信息,请访问Screens, Conductors and Composition。