大佬教程收集整理的这篇文章主要介绍了mvvm – 导航逻辑属于哪个,View,ViewModel或其他位置?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如果用户点击按钮,我想导航到一个新的视图.当然,Navigationservice是View的一部分,而不是viewmodel.这意味着导航是视图的责任?但是在我的情况下,当按钮被点击时,我将会看到的视图取决于很多因素,包括登录用户是谁,数据库所在的状态等等.当然,View不应该需要所有那个信息.
一旦您的命令处理程序决定了哪个视图导航,它可以在消息总线上发布消息.您的视图将侦听该消息,然后使用Navigationservice实际执行导航.所以除了等待被告知在某个地方进行导航,然后导航到被告知的地方,它不会做任何事情.
我一直在这样做,定义一个我的视图模型可以发布的Navigation@R_197_8798@ge类,以及一个视图基类,我的视图从其中继承包含侦听器. Navigation@R_197_8798@ge如下所示:
public class Navigation@R_197_8798@ge : Notification@R_197_8798@ge { public String Pagename { get { return base.Notification; } } public Dictionary<String,String> QueryStringParams { get; private set; } public Navigation@R_197_8798@ge(String pageName) : base(pageName) { } public Navigation@R_197_8798@ge(String pagename,Dictionary<String,String> queryStringParams) : this(pageName) { QueryStringParams = queryStringParams; } }
这允许简单地传递页面名称,或者可选地还包括任何必需的查询字符串参数.一个RelayCommand处理程序会发布这样的消息:
private void RelayCommandHandler() { //Logic for determining next view,then ... Messenger.Default.Send(new Navigation@R_197_8798@ge("ViewToNavigate")); }
最后,视图基类如下所示:
public class BasePage : PhoneApplicationPage { public BasePage() { Messenger.Default.Register<Navigation@R_197_8798@ge>(this,NavigateToPagE); } protected void NavigateToPage(Navigation@R_197_8798@ge @R_197_8798@gE) { //GetQueryString isn't shown,but is simply a Helper method for formatTing the query String from the Dictionary String queryStringParams = @R_197_8798@ge.QueryStringParams == null ? "" : GetQueryString(@R_197_8798@gE); String uri = String.Format("/Views/{0}.xaml{1}",@R_197_8798@ge.Pagename,queryStringParams); Navigationservice.Navigate(new Uri(uri,UriKind.RelativE)); } }
这是一个约定,其中所有的视图都在应用程序根目录中的“Views”文件夹中.这对@R_768_9616@程序工作正常,但当然这可以扩展到支持不同的方案来组织您的视图.
以上是大佬教程为你收集整理的mvvm – 导航逻辑属于哪个,View,ViewModel或其他位置?全部内容,希望文章能够帮你解决mvvm – 导航逻辑属于哪个,View,ViewModel或其他位置?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。