Когда я называюPrism + XF: Как перейти на другую точку зрения в зависимости от приложения состояния
navigationService.NavigateAsync('MyPage')
в зависимости от разрешения экрана, он должен показать вид по-разному:
On большой экран он показывает панель внутри текущей Page
(а ContentView
должен быть создан внутри текущего ContentPage
), и на маленьких экранах он должен перейти к Page
Как я могу достичь этого с помощью Призмы?
EDIT: Проблема у меня есть на самом деле, как показать представление. На маленьком экране он перемещается на Page
, как на большом экране ему нужно сделать View
, видимым на текущей странице.
Как я могу это достичь? Должен ли я создать свою навигационную службу и переопределить NavigateAsync
? И на основе имени вида и устройства идиомы, я либо перейти к нему с поведением по умолчанию, или я показываю вид в текущем виде:
public class MyPageNavigationService : UnityPageNavigationService
{
public MyPageNavigationService (IUnityContainer container, IApplicationProvider applicationProvider, ILoggerFacade logger)
: base(container, applicationProvider, logger)
{
}
public override Task NavigateAsync(string name, NavigationParameters parameters = null, bool? useModalNavigation = default(bool?), bool animated = true)
{
if(Device.Idiom == TargetIdiom.Tablet)
{
if (name == "TheNextPage")
{
// do custom stuff here, show the view inside current Page
}
else
{
return base.NavigateAsync(name, parameters, useModalNavigation, animated);
}
}
else
{
return base.NavigateAsync(name, parameters, useModalNavigation, animated);
}
}
}
спасибо. Я всегда могу найти «решения», но лишь немногие верны. Разделение по модулю имеет смысл, но оно добавляет немного сложности. – JamesL
Я бы сказал, что это делает его простым, и ваш код будет намного чище. Таким образом, вам не нужно иметь логические проверки в вашем коде, чтобы использовать другую страницу. Это загрязнит вашу базу кода. Используя модули, вы загружаете только те виды, которые вам нужны для устройства, и ничего больше не меняется. Ваша логика VM всегда будет перемещаться к той же клавише View. Просто. –
Одной из проблем, которые возникают у меня иногда, является то, что модели-образцы можно легко использовать в сценарии, где у вас есть представление для небольшого экрана и другого представления для большего экрана. В представлении для небольших экранов есть кнопка, которая переходит на следующий экран, но она не существует в представлении для больших экранов, потому что на большом экране следующий вид сидит на одной странице (это даже не страница, это вид). Это позволяет модели представления для маленького экрана иметь команду, которая не существует на большом экране. В то же время необходимо разделить другую функциональность между малыми и большими экранами просмотра. – JamesL