WPF Prism V2 с использованием M-V-VM - добавление представления во время выполнения в регион из ViewModel - PullRequest
0 голосов
/ 25 мая 2009

Надеюсь, довольно просто: я впервые попробовал WPF с Prism V2 с использованием M-V-VM и пока нашел все довольно круто. Моя оболочка довольно проста: ленточный элемент управления вверху, DataGrid заявок в службу поддержки слева и TabControl справа.

Когда пользователь открывает выбранный тикет из таблицы данных, я хочу, чтобы тикет открывался как вкладка в элементе управления вкладками. Я знаю, что для этого мне нужно добавить, а затем активировать вид на регион с помощью RegionManager. Но делать это из ViewModel мне не кажется правильным, хотя я мог бы сделать это, используя DI (DepenecyInjection), он все еще вызывает тревогу в связи с тем, что ViewModel дает некоторые знания о View.

Чтобы добавить к этому, другие модули также будут добавлять другие представления (контакт, клиент и т. Д.) В TabControl, я хотел бы использовать DataTemplates, чтобы TabControl отображал представление правильно, кто-нибудь может дать мне какие-либо указатели это тоже.

Большое спасибо Ben

Полные ответы, пожалуйста, а не просто ссылки. Это то, для чего предназначен StackOverflow!

Ответы [ 2 ]

1 голос
/ 06 июня 2009

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());
}
0 голосов
/ 27 мая 2009

Команды - способ сделать это - вы отправите команду себе под названием «RequestBringTicketIntoView»; оно всплывет к окну, где вы с ним справитесь. Прочитайте статью Джоша Смита:

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

...