2013-10-01 4 views
1

У меня есть пользовательский элемент управления, реализующий следующий интерфейс:Разрешающая Просмотр и ViewModel с помощью МОК

public interface IView 
    { 
     object DataContext { get; set; } 
    } 

..и это соответствующий вид модели реализации следующий интерфейс:

public interface ICertificationViewModel 
    {  
     string NumOfCertification { get; set; } 
    } 

Я другой сервис под названием NavigationService, реализующий следующий интерфейс:

public interface INavigationService<TView,TViewModel> 
    { 
     void ShowView<TView,TViewModel,T>(T model) where T:class; 
    } 

Я использую единство и мне нужно собрать новый (временный) вид и viewmodel всякий раз, когда вызывается метод ShowView в службе навигации. Я не могу вставлять View и ViewModel в зависимости от конструктора (так как должны создаваться новые экземпляры), и я не хочу использовать маршрут локатора службы (т. Е. Вызывать единство внутри ShowView для разрешения представления и viewmodel). Есть ли способ решить эту проблему, используя единство или что-то еще? Я искал везде, и я не могу найти определенный ответ. Я использую Prism и .NET 3.5. Я также хотел бы сохранить это немного общим, чтобы любые виды и модели просмотра могли быть разрешены с помощью метода NavigationService ShowView.

Помогите с решением проблемы.

+0

[Эта ссылка из урока Призма] (http://msdn.microsoft.com/en-us/library/gg430861 (v = pandp.40) .aspx) может быть полезна. –

ответ

1

библиотека Prism предоставляет RegionNavigationService, который управляет навигации среди Просмотров. RegionNavigationService реализует IRegionNavigationService и RequestNavigate() определяется методом. Вы можете разрешить навигации для любого View зарегистрирован в указанном области (Это не имело бы смысла Navigate через Просмотров в различных регионов).

/// <summary> 
/// Provides navigation for regions. 
/// </summary> 
public interface IRegionNavigationService : INavigateAsync 
{ 
    ... 
} 

INavigateAsync:

/// <summary> 
/// Provides methods to perform navigation. 
/// </summary> 
/// <remarks> 
/// Convenience overloads for the methods in this interface can be found as extension methods on the 
/// <see cref="NavigationAsyncExtensions"/> class. 
/// </remarks> 
public interface INavigateAsync 
{ 
    /// <summary> 
    /// Initiates navigation to the target specified by the <see cref="Uri"/>. 
    /// </summary> 
    /// <param name="target">The navigation target</param> 
    /// <param name="navigationCallback">The callback executed when the navigation request is completed.</param> 
    /// <remarks> 
    /// Convenience overloads for this method can be found as extension methods on the 
    /// <see cref="NavigationAsyncExtensions"/> class. 
    /// </remarks> 
    void RequestNavigate(Uri target, Action<NavigationResult> navigationCallback); 
} 

Если у вас есть некоторые пользовательские до и после навигация работы в ShowView() метода, вы можете реализовать INavigationAware, который определяет OnNavigatedTo() и OnNavigatedFrom(), на Просмотров или ViewModels.

Чтобы увидеть, как работают эти методы, следующие QuickStart использует OnNavigatedTo() метод для того, чтобы читать и устанавливать какие-либо параметры контекста на новый навигация View:

Документация по информационному обеспечению:

Если это не поможет, то было бы полезно знать, ожидаемое поведение в Showview() метод будет иметь.

С уважением.

Смежные вопросы