0
尋找關於處理頁面導航的以下方案的評論。使用Mvvm Light Messenger以廣播方式發送消息,因此如果多頁解決方案中的所有ViewModel都收聽相同類型的消息,則每個消息都將收到所有消息。過濾掉當前ViewModel需要處理的部分是HandleIncomingMessage()WP7芒果頁面導航?
另外我想知道在哪裏存儲通過應用程序流動的「globalish」數據,使用了迄今爲止在App.xaml.cs中定義的靜態屬性currentCustomerId等等。但是,我是否也應該將來自數據庫的所有人員數據的對象圖表放在這裏?
另一種方法是擴展或重載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);
//爲第2頁
創建類似頁面高清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);
}
}
//爲第3頁
創建類似的VMpublic 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...
}
}
}
//創建一個類似VM爲Page 2
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
}
謝謝!已經離開這個項目一段時間了,但現在把事情整理一下了。 – Caad9
讚賞讚賞:) –