c# - 将多个 Caliburn.Micro View 模型绑定(bind)到同一 View 的不同实例

标签 c# wpf mvvm mef caliburn.micro

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

我最初的想法是,我可以在 VM 中以编程方式执行此操作,方法是查找与 VM 对象上的 View 相关的任何属性(它本身是 Screen 对象派生)。它的直接父类(super class)用作 的契约[ImportMany] 以便父虚拟机和 View 可以对集合进行制表。

[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()));
    }

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

我正在考虑的另一种方法是显式实例化同一 View 模型的多个实例并手动将它们添加到集合中,但这似乎违反了 MEF 的 [ImportMany] 的规定来这里是为了削弱应用程序的设计。

最佳答案

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

在此示例中,我有两个 View 模型 Examples.ViewModels.SharedData1ViewModelExamples.ViewModels.SharedData1ViewModel 以及一个 View Examples.Views.SharedDataView code> 我希望成为 Caliburn.Micro 默认为两者定位的 View 。

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

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

关于c# - 将多个 Caliburn.Micro View 模型绑定(bind)到同一 View 的不同实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28508254/

相关文章:

c# - 如何在运行时使用 MVVM 将 List<object> 绑定(bind)到 DataGrid

wpf - 卡利本微 : how to set binding UpdateSourceTrigger?

c# - 如何使用不同的 Windows 帐户连接到 SQL Server

具有多个固定高度部分和相对于窗口大小的某些部分的 WPF 布局

c# - IMAP 搜索“字符

jquery - Silverlight 视频拉伸(stretch)

c# - 使用 DataGridTemplateColumn 在按键时开始编辑模式

c# - 使用 MVVM 重置组合框所选项目

c# - asp.net MVC 4 外部登录提供程序 - 'No OpenID endpoint found' (google)

c# - Monotouch/C# 版本的 "stringWithContentsOfUrl"