寻找有关以下处理页面导航方案的评论。使用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
创建类似的页面defpublic 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
创建类似的VMpublic 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
}