MCS*_*MCS 7 navigation silverlight mvvm silverlight-4.0
我有一个Silverlight 4项目,它显示一个图表和一些按钮,允许用户更改图表的日期范围.日期范围也可以通过查询字符串参数传递 - 类似于http:// myserver/MySilverlightPage /#?DateRange = OneMonth - 当用户点击按钮时我也想更新Url.
我知道这样做的方法是调用this.NavigationService.Navigate(new Uri(...))
,但据我所知,这只能从后面的Silverlight页面代码完成.由于我使用的是MVVM,因此命令的所有处理都在ViewModel类中进行.有没有办法Navigate
从ViewModel中调用或以其他方式更改Url?
为了澄清,xaml包括以下内容Button
:
<Button Content="1 Month View"
Command="{Binding OneMonthCommand}" />
Run Code Online (Sandbox Code Playgroud)
ViewModel类包含一个OneMonthCommand
属性:
public ICommand OneMonthCommand { get; set; }
Run Code Online (Sandbox Code Playgroud)
单击该按钮时,将Execute
调用ICommand实现的方法.问题是 - 如何从该方法中更改Url?
我发现这是我使用MVVM模式编写的Silverlight应用程序中的常见问题.我使用NavigationHelper类来集中导航逻辑.它看起来像这样:
public interface INavigationHelper
{
void Home();
void SomeOtherPage();
}
public class NavigationHelper : INavigationHelper
{
private NavigationService _navSvc;
public NavigationHelper(NavigationService navSvc)
{
_navSvc = navSvc;
}
public void Home()
{
_navSvc.Navigate(new Uri("/Home", UriKind.Relative));
}
public void SomeOtherPage()
{
_navSvc.Navigate(new Uri("/SomeOtherPage", UriKind.Relative));
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我让ViewModel有一个NavigationHelper属性,该属性是在构造ViewModel时由页面设置的.
顺便说一句,看起来在ViewModel的构造函数中传递NavigationHelper会更简单.但是根据我的经验,拥有ViewModel的非默认构造函数会使得在Blend中设计时工作变得更加困难.
归档时间: |
|
查看次数: |
3842 次 |
最近记录: |