2017-01-30 2 views
0

Я пытаюсь добиться навигации журнал, который имеет, наряду с Ури и параметров навигации, строка, содержащая некоторую информацию создается в момент запроса навигации:Расширение Prism NavigationParameters с названием

public class ExtendedNavigationParameters : NavigationParameters 
{ 
    public string Titulo { get; set; } 
} 

так что, когда я хочу, чтобы перейти к какому-то конкретному объекту, я хочу передать некоторые титул вместе с Ури и коллекцией параметров, так что я установить это свойство в моих расширенных параметрах объект:

ExtendedNavigationParameters parameters = new ExtendedNavigationParameters { {"Maquina", Maquina}}; 
parameters.Titulo = Maquina.Descripcion; 

Тогда это параметры отправляются через RequestNavigate Метод:

_regionManager.RequestNavigate(IdRegion, Uri, parameters); 

В этот момент объект параметров имеет тип ExtendedNavigationParameters. Однако, после того, как навигация завершена, когда я пытаюсь получить доступ к этому информация корыта RegionNavigationJournal.CurrentEntry.Parameters объект имеет тип NavigationParameters (исключение пытается бросить в ExtendedNavigationParameters).

Почему это? Объект воссоздан в какой-то момент? Как я могу сохранить эту информацию в RegionNavigationJournal?

+0

Это не похоже на хорошую идею. Зачем расширять «NavigationParameters»? Вы можете добавить любой объект в коллекцию параметров как пару имя/значение. Либо сделайте имя нужного названия, либо добавьте Title в объект значения, либо используйте кортеж, или специальный объект, который вы используете для передачи заголовка и объекта в качестве одного сложного объекта. –

+0

@ Р. Рихардс, на самом деле не думал. Это сработало бы для меня. Поработайте как ответ, и я постараюсь решить его. Благодарю. – Pinx0

ответ

1

Есть несколько подходов к этому, что будет работать против расширения NavigationParameters.

Первый заключается в использовании кортежа, чтобы передать информацию.

private void DoNavigation() 
{ 
    var parameters = new NavigationParameters(); 
    var paramPayload = new Tuple<string, Maquina>("Maquina", _maquina); 
    parameters.Add("Payload", paramPayload); 
    _regionManager.RequestNavigate(IdRegion, Uri, parameters); 
} 

В объекте набора (paramPayload), свойство Элемент1 будет указывать на название, Элемент2 свойство будет указывать на объект интереса. _maquina содержит ссылку на объект, который вы пытаетесь отправить во время навигации. Как это будет создано, я позволю вам позаботиться.

Другой подход, который будет работать, чтобы создать объект, который будет упаковать информацию в единое целое, чтобы пройти.

Класс для этого объекта может выглядеть следующим образом:

public class NavigationPayload 
{ 
    public NavigationPayload(string title, object payload) 
    { 
     Title = title; 
     Payload = payload; 
    } 
    public string Title { get; set; } 
    public object Payload { get; set; } 
} 

Чтобы использовать его:

private void DoNavigation() 
{ 
    var parameters = new NavigationParameters(); 
    var paramPayload = new NavigationPayload("Maquina", _maquina); 
    parameters.Add("Payload", paramPayload); 
    _regionManager.RequestNavigate(IdRegion, Uri, parameters); 
} 

Используете ли вы кортеж, или объект своего собственного дизайна, полностью до вы.

Некоторые программисты склонны использовать Tuple только для прототипирования, и перейти к пользовательскому объекта для окончательной реализации, поскольку намерение является немного более ясно. Но там нет жесткого правила.

Удачи вам!

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