我正在使用CM和WPF进行一些数据演示,并且某些数据选项卡具有非常相似的格式,但必须作为选项卡的一部分包含在包含选项卡的单独VM中。
我最初的想法是,我可以在VM中以编程方式执行此操作,方法是在VM对象上查找与Views有关的任何属性(其本身是Screen对象的派生。)其直接超类用作合同,[ImportMany]
以便父VM和视图可以将集合制成表格。
[ImportingConstructor]
public PartiesMasterPartiesViewModel(
IEventAggregator events,
IHelpService help,
ResourceManager<B_Action> actionResource,
IActionService actionService)
: base( events, help, actionResource, actionService)
{
}
protected override void OnActivate()
{
base.OnActivate();
this.Views.Add(new KeyValuePair<object, object>(this,
new PartiesMasterListView()));
}
因此,要么我没有正确使用此属性,要么它没有执行我认为的功能,因此我需要使用另一种方式。
我正在考虑的另一种方式是,显式实例化同一视图模型的多个实例,然后将它们手动添加到集合中,但这似乎违反了MEF的[ImportMany]
操作,从而削弱了应用程序的设计。
实现由多个视图模型共享的视图的最简单方法是ViewLocator
使用一些额外规则配置。
在此示例中,我有两个视图模型Examples.ViewModels.SharedData1ViewModel
和Examples.ViewModels.SharedData1ViewModel
一个视图Examples.Views.SharedDataView
,我希望将其作为Caliburn.Micro在默认情况下为两者定位的视图。
在我的设置代码中,我可以将以下简单的正则表达式添加到中ViewLocator
。
ViewLocator.NameTransformer.AddRule(
@"^Examples.ViewModels\.SharedData(\d+)ViewModel",
@"Examples.Views.SharedDataView");
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句