[英]Can this generic navigation command be improved?
我一直在尋找一種創建導航的方法,該方法是將命令綁定與視圖中指定的命令參數結合使用,以在ViewModel中執行“通用”導航命令。
這是在企業應用程序示例中找到的自定義Navigation Service中的原始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>();
但是一些如何能夠從視圖的命令參數中調用和推斷。
這聽起來合理嗎?
抱歉,由於我處於當前能力的邊緣,無法更加連貫地表達我的問題。
我知道,如果我確切地知道我要描述的是什么,我可以將我的問題壓縮成幾句話。
我很高興能在此方面取得進展,因為我的進度正在變得陳舊。
干杯。
編輯:感謝G.hakim的提問 。
通過使用這些:
<Button
Command="{Binding NavigationCommand}"
CommandParameter="{x:Type vm:SomeViewModel}" />
public ICommand NavigationCommand
=> new Command<Type>(async (Type viewModelType)
=> await Navigate(viewModelType));
我能夠使用一個命令導航到許多不同的視圖,因此我認為我可以不必編寫多個導航命令。
您可以做的是這樣的:
public Task NavigateToAsync<T>()
{
return InternalNavigateToAsync(typeof(T), null);
}
現在,該泛型將接受您在T
中輸入的任何內容
有關泛型如何工作的更多信息,您可以檢查相同的Microsoft文檔。
另外,可以通過向其添加where子句來確切指定泛型應為哪種類型,以免遇到任何類型的運行時錯誤。
public Task NavigateToAsync<T>() where T : YourViewModelType
{
return InternalNavigateToAsync(typeof(T), null);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.