假設我使用MVVM方法(Silverlight)MVVM和Silverlight中的導航
我使用命令處理了所有按鈕。
假設我有一個按鈕用於導航到某個頁面,例如我們選擇了一個網格中的客戶,並且想導航到客戶的詳細信息視圖。
我可以使用DelegateCommand處理此按鈕嗎?怎麼樣?我可以從ViewModel處理導航嗎?我是否被迫從代碼隱藏處理導航?
假設我使用MVVM方法(Silverlight)MVVM和Silverlight中的導航
我使用命令處理了所有按鈕。
假設我有一個按鈕用於導航到某個頁面,例如我們選擇了一個網格中的客戶,並且想導航到客戶的詳細信息視圖。
我可以使用DelegateCommand處理此按鈕嗎?怎麼樣?我可以從ViewModel處理導航嗎?我是否被迫從代碼隱藏處理導航?
這裏,我們去:
的XAML:
<Button Command="{Binding GoToCustomerDetailsPage}" Content="Customer Details"/>
視圖模型:
private INavigationService _navigationService;
public ViewModel(INavigationService navigationService)
{
_navigationService=navigationService;
}
public ICommand GoToCustomerDetailsPage
{
get{
return new DelegateCommand(GoToCustDetailsPage,CanGoToCustDetailsPage);
}
}
private void GoToCustDetailsPage()
{
_navigationService.Navigate(new Uri("/CustomerDetails", UriKind.Relative));
}
private bool CanGoToCustDetailspage()
{
return true;//Or some sensible code that determines if this is sensible.
}
基本上,該命令被綁定到按鈕按正常。該命令是viewmodel上的一個屬性。當命令執行時,它只是在視圖模型中調用一個私有方法。
在INavigationService位於哪個dll中,我在頁面中使用NavigationService,並且Page有一個navigationService聲明,但是如何在ViewModel中執行? – Rafael
我想我已經用你的建議部分解決了它。我在ViewModel構造函數中使用了NavigationService而不是INavigationService,並且將usings語句設置爲System.Windows.Navigation,但是當單擊導航按鈕時,此版本的構造函數未被使用,因此,我的navigationService變量爲null! – Rafael
當你實例化你的視圖模型時,你如何傳遞你的導航服務?例如:新的ViewModel(NavigationService),其中NavigationService是導航服務對象的一個實例。 –
這裏INavigationService不可用。它提供了錯誤,如果我們添加的命名空間System.Windows.Navigation ..
你如何從一個頁面導航到當前頁面?你有某種導航服務嗎?如果你會提供一些非常有用的代碼。 –
現在我正在使用代碼隱藏方法: private void btnCustomer_Click(object sender,RoutedEventArgs e){{0} {0} {0} {{}} NavigationService.Navigate(new Uri(「/ CustomerDetails」,UriKind.Relative)); }' – Rafael
未解決的問題:導航是否真的是ViewModel的一部分,還是View的實現細節?如果是後者,可以根據需要堅持使用代碼隱藏或HyperlinkButton。 – jv42