将多个Caliburn.Micro视图模型绑定到同一视图的不同实例

时间:2015-02-13 20:31:31

标签: c# wpf mvvm mef caliburn.micro

我正在使用CM和WPF进行一些数据表示,并且一些数据选项卡具有非常相似的格式,但必须保存在单独的包含VM的选项卡中,作为应用程序标准的一部分。

我最初的想法是,我可以在VM中以编程方式执行此操作,方法是查找与VM对象上的视图有关的任何属性(它本身是一个Screen对象派生。)它的直接超类用作{{1的合约这样父虚拟机和视图就可以将集合制成表格。

[ImportMany]

所以要么我没有正确使用这个属性,要么它没有按照我的想法去做,我需要用另一种方式。

我想到这样做的另一种方式是明确地实例化同一个视图模型的多个实例并手动将它们添加到集合中,但这似乎违反了MEF的[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())); } 会在这里做并削弱应用程序的设计。

1 个答案:

答案 0 :(得分:2)

实现多个视图模型共享视图的最简单方法是使用一些额外规则配置ViewLocator

在此示例中,我有两个视图模型Examples.ViewModels.SharedData1ViewModelExamples.ViewModels.SharedData1ViewModel以及一个视图Examples.Views.SharedDataView,我想成为Caliburn.Micro为两者定位的视图默认值。

在我的设置代码中,我可以将以下简单的正则表达式添加到ViewLocator

ViewLocator.NameTransformer.AddRule(
    @"^Examples.ViewModels\.SharedData(\d+)ViewModel",
    @"Examples.Views.SharedDataView");