我一直在寻找一种创建导航的方法,该方法是将命令绑定与视图中指定的命令参数结合使用,以在ViewModel中执行“通用”导航命令。
这是enterprise application example中的自定义导航服务中的原始导航实现。
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>();
但是有一些方法可以从视图的命令参数中调用和推断。
听起来完全合理吗?
很抱歉,由于我正处于当前能力的边缘,无法更加连贯地表达我的问题。
如果我确切地知道我要描述的是什么,我知道我可以将问题压缩成几句话。
在我的进度变得陈旧的过程中,我希望能找到任何指向此资源的线索。
干杯。
编辑: 感谢G.hakim的提问。
使用这些:
<Button
Command="{Binding NavigationCommand}"
CommandParameter="{x:Type vm:SomeViewModel}" />
public ICommand NavigationCommand
=> new Command<Type>(async (Type viewModelType)
=> await Navigate(viewModelType));
我可以使用一个命令导航到许多不同的视图, 因此,我认为我能够不必编写多个导航命令。
答案 0 :(得分:0)
您可以做的是这样的:
public Task NavigateToAsync<T>()
{
return InternalNavigateToAsync(typeof(T), null);
}
现在,该泛型将接受您在T
中按下的任何内容
有关泛型工作原理的更多信息,请检查Microsoft文档是否相同。
此外,您可以通过向其添加where子句来确切指定泛型应为哪种类型,以免遇到任何类型的运行时错误。
public Task NavigateToAsync<T>() where T : YourViewModelType
{
return InternalNavigateToAsync(typeof(T), null);
}