WP7芒果中的页面导航?

时间:2011-11-03 10:05:20

标签: windows-phone-7 mvvm mvvm-light

寻找有关以下处理页面导航方案的评论。使用Mvvm Light Messenger以广播方式发送消息,因此如果多页解决方案中的所有ViewModel都收听相同类型的消息,则每个消息都将收到所有消息。过滤掉当前ViewModel需要处理的那些是由HandleIncomingMessage()

完成的

另外我想知道在哪里存储流经应用程序的“全局”数据,到目前为止已经使用了针对currentCustomerId等在App.xaml.cs中定义的静态属性。但是我是否应该将对象图与所有人数据一起放在数据库在这里?

另一种方法是扩展或重载PageTransitionMessageType()并提供向每个页面发送特定消息的属性。通过这种方式,您不必担心过滤上述传入消息。

任何评论都赞赏!

//在ViewModelLocator

public static readonly Uri Page1Uri = new Uri("/Views/Page1.xaml", UriKind.Relative);
public static readonly Uri Page2Uri = new Uri("/Views/Page2.xaml", UriKind.Relative);
public static readonly Uri Page3Uri = new Uri("/Views/Page3.xaml", UriKind.Relative);

//为Page2

创建类似的页面def
public partial class Page1 : PhoneApplicationPage
{
public Page1()
{
    InitializeComponent();
    Messenger.Default.Register<PageTransitionMessageType>(this, (action) => NavigationHandler(action));

}

private void NavigationHandler(PageTransitionMessageType action)
{
    NavigationService.Navigate(action.PageUri);
}
}

//为Page3创建类似的VM

public class Page2ViewModel : ViewModelBase
{
public Page2ViewModel ()
{
    Messenger.Default.Register<PageTransitionMessageType>(this, (s) => HandleIncomingMessage(s));
}

private void HandleIncomingMessage(PageTransitionMessageType s)
{
    // check for page2 message
    if (s.PageUri == ViewModelLocator.Page2Uri)
    {
        // do cunning page2 stuff...
    }
}
}

//为Page2

创建类似的VM
public class Page1ViewModel : ViewModelBase
{
public RelayCommand GotoPage2Cmd { get; private set; }

public Page1ViewModel()
{
    GotoPage2Cmd = new RelayCommand(() => ExecuteGoToPage2(), () => CanExecuteGoToPage2());
}

private void ExecuteGoToPage2()
{
    var message = new PageTransitionMessageType() { PageUri = ViewModelLocator.Page2Uri };
    Messenger.Default.Send<PageTransitionMessageType>(message);
}
}       


public class PageTransitionMessageType
{
    public Uri PageUri { get; set; }
    // e.g. put props with data you'd like to pass from one page to another here

}       

1 个答案:

答案 0 :(得分:1)

我建议在IsolatedStorage

中保存“全局”变量