簡體   English   中英

可以改進此通用導航命令嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM