0

希望是一个非常简单的,我第一次尝试使用 MV-VM 和 Prism V2 的 WPF,到目前为止发现一切都非常棒。我的 Shell 非常简单,顶部是 Ribbon Control,左侧是 Helpdesk 工单的 DataGrid,右侧是 TabControl。

当用户从数据网格打开所选票证时,我希望票证作为选项卡控件上的选项卡打开。我知道为了做到这一点,我需要使用 RegionManager 添加并激活该区域的视图。但是从 ViewModel 执行此操作对我来说似乎不正确,尽管我可以使用 DI (DepenecyInjection) 执行此操作,但它仍然在我的脑海中敲响警报,让 ViewModel 了解有关视图的一些知识。

要添加到这一点,不同的模块也会将其他视图(联系人、客户端等)添加到 TabControl 中,我想使用 DataTemplates 来让 TabControl 正确显示视图,任何人都可以给我任何指示.

非常感谢本

请提供完整答案,而不仅仅是链接。这就是 StackOverflow 的用途!

4

2 回答 2

1

MVVM + 服务 = 终极力量!

服务只是一个众所周知的接口,并在您的 IOC 容器中注册。当 ViewModel 需要在自身之外做一些事情时,比如打开一个选项卡式文档,它会使用该服务。然后根据特定程序的需要实施服务。

例如:

public interface IDocumentService
{
    void OpenDocument(IViewModel viewModel);
}

internal class DocumentService:IDocumentService
{
    public void OpenDocument(IViewModel viewModel)
    {
        // Implement code to select the View for the ViewModel,
        // and add it to your TabControl.
    }
}

{
    // Somewhere in your ViewModel...
    // Make sure you can get the IDocumentService
    IDocumentService docService = ioc.Get<IDocumentService>();
    docService.OpenDocument(new TicketViewModel());
}
于 2009-06-06T14:05:14.913 回答
0

命令是执行此操作的方法 - 您将向自己发送一个名为“RequestBringTicketIntoView”的命令;它会冒泡到您处理它的窗口。阅读 Josh Smith 的文章:

http://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/

于 2009-05-27T05:32:47.460 回答