首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVVM轻型工具包设计方法(导航和视图加载)

MVVM轻型工具包设计方法(导航和视图加载)
EN

Stack Overflow用户
提问于 2011-06-06 11:07:57
回答 1查看 699关注 0票数 1

我正在构建一个简单的应用程序,在Silverlight中有4-5视图。我偶然发现了MVVM工具包,我认为它符合我的需要。

背景

应用程序将具有具有典型列表和详细信息显示的视图。

  • Manufacturer
  • Product

等等,左导航,页眉和页脚(用户控件)。

我正在考虑在设计时创建一个带有用户控件的主页。

问题

在从左侧导航控件选择链接时,应该用不同的视图更新中央面板(如制造商、产品等)。

我知道Messenger是轻型工具包中不同VM之间通信的一种选择。

问题

如何使用MVVM轻量级工具包设计我的应用程序。运行时需要用不同的视图加载中央窗格。

我特别关注在实现应用程序的导航部分方面的帮助。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-06-06 18:42:59

我不得不以一种非mvvm的方式实现基本的nagivigtion。我的主视图的构造函数上有一个消息侦听器,它侦听页面导航消息(自定义消息学习、喜爱它、使用它),然后它将导航帧的内容源设置为消息中发送的url。我有使用字符串常量的所有页面和子页面导航设置的URL。

代码语言:javascript
运行
复制
public MainPage()
        {
            InitializeComponent();
            Loaded += OnLoaded;
            WebContext.Current.Authentication.LoggedOut +=
                new EventHandler<System.ServiceModel.DomainServices.Client.ApplicationServices.AuthenticationEventArgs>(Authentication_LoggedOut);
            Messenger.Default.Register<msgs.NavigationRequest<PageURI>>(this, (uri => ContentFrame.Navigate(uri.Content)));
            Messenger.Default.Register<WavelengthIS.Core.Messaging.ExceptionMessage>(this, ex => ShowExceptionMessage(ex));
            Messenger.Default.Register<WavelengthIS.Core.Messaging.StringMessage>(this, str => ShowMessageForUser(str));

        }


public class PageURI : Uri
    {
        public PageURI(string uriString, UriKind uriKind)
            : base(uriString, uriKind)
        {

        }


    }


public class PageLinks
    {
        public const string SEARCHBYDAYCOUNTVIEW = "/Views/PatientSearchHeaders/SearchByDayCountView.xaml";
        public const string SEARCHBYPATIENTCRITERIAVIEW = "/Views/PatientSearchHeaders/SearchByPatientCriteriaView.xaml";
        public const string QUESTIONAIRRESHELL = "/Views/QuestionairreViews/QuestionairreShell.xaml";
        public const string HOME = "/Views/PrimarySearchView.xaml";
        public const string REPORTS = "/Views/ReportsPage.xaml";
        public const string LOGINPAGE = "/Views/LoginPageView.xaml";
    }

VM中的实际调用:

代码语言:javascript
运行
复制
private void OnSurveyCommandExecute()
        {
            Wait.Begin("Loading Patient List...");
            _messenger.Send<ReadmitPatientListViewModel>(this);
            _messenger.Send<Messages.NavigationRequest<SubClasses.URI.PageURI>>(GetNavRequest_QUESTIONAIRRESHELL());

        }

        private static Messages.NavigationRequest<SubClasses.URI.PageURI> GetNavRequest_QUESTIONAIRRESHELL()
        {
            Messages.NavigationRequest<SubClasses.URI.PageURI> navRequest =
                new Messages.NavigationRequest<SubClasses.URI.PageURI>(
                    new SubClasses.URI.PageURI(Helpers.PageLinks.QUESTIONAIRRESHELL, System.UriKind.Relative));
            return navRequest;
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6251112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档