Можно ли улучшить эту общую команду навигации? - PullRequest
0 голосов
/ 09 июля 2019

Я искал способ создать навигацию, где я использую привязку команды с указанным в представлении параметром команды, чтобы выполнить «общую» команду навигации в моей ViewModel.

Этооригинальная реализация Navigation в пользовательской службе навигации, найденная в примере корпоративного приложения .

        public Task NavigateToAsync<TViewModel>() where TViewModel : ViewModelBase
        {
            return InternalNavigateToAsync(typeof(TViewModel), null);
        }

Вы управляете этим, вызывая:

NavigateToAsync<SomeViewModel>();

Лучшее, что у меня естья смог заменить вышеприведенную реализацию следующим:

        public Task NavigateToAsync(Type viewModel)
        {
            return InternalNavigateToAsync(viewModel, null);
        }

Где тип ViewModel передается в качестве параметра команды из командного представления.

Что я ищуэто выяснить, возможно ли объединить эти два, вместо того, чтобы полагаться на отдельные реализации.

Я хотел бы сохранить это,

NavigateToAsync<TViewModel>();

, но кое-как, как можноВызовите и выведите из параметра команды представления.

Это звучит разумно вообще?

Извините, что не могу выразить мою проблему более последовательно, поскольку я quЭто на грани моих нынешних возможностей.

Я знаю, что мог бы, возможно, сжать свой вопрос в несколько предложений, если бы точно знал, что именно я хочу описать.

Я был бы признателен за любые указания на возможные источники по этому вопросу, так как мой прогресс устарел.

Приветствия.

РЕДАКТИРОВАТЬ: Спасибо G.hakim за вопрос.

Используя их:

            <Button
                Command="{Binding NavigationCommand}"
                CommandParameter="{x:Type vm:SomeViewModel}" />
public ICommand NavigationCommand
 => new Command<Type>(async (Type viewModelType)
 => await Navigate(viewModelType));

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

1 Ответ

0 голосов
/ 09 июля 2019

Что вы можете сделать, это что-то вроде этого:

 public Task NavigateToAsync<T>() 
    {
        return InternalNavigateToAsync(typeof(T), null);
    }

Теперь этот универсальный будет принимать все, что вы нажимаете в T

Для получения дополнительной информации о том, как работают генерики, вы можете проверить Microsoft документы для того же.

Кроме того, вы можете точно указать, какой тип должен быть универсальным, чтобы вы не сталкивались с ошибками во время выполнения, добавляя к нему предложение where.

 public Task NavigateToAsync<T>() where T : YourViewModelType
    {
        return InternalNavigateToAsync(typeof(T), null);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...