Tôi đang cố gắng tìm ra cách để ViewModel xử lý việc lưu hoặc khôi phục trạng thái của trang khi trang được điều hướng Từ hoặc Tới. Điều đầu tiên tôi đã thử là thêm một hành vi EventToCommand vào trang, nhưng các sự kiện (OnNavigatedFrom và OnNavigatedTo) được khai báo được bảo vệ và EventToCommand không thấy các sự kiện liên kết với.Xử lý các sự kiện OnNavigatedFrom/OnNavigatedTo trong ViewModel
Tiếp theo, tôi nghĩ tôi sẽ cố gắng sử dụng các lớp Messenger để vượt qua một thông điệp tới các ViewModel sử dụng mã vào những năm Xem mã sau:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Send<PhoneApplicationPage>(this);
base.OnNavigatedFrom(e);
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Send<PhoneApplicationPage>(this);
base.OnNavigatedTo(e);
}
Nhưng điều này dường như có hai vấn đề, đầu tiên là có mã này trong mã đằng sau trang. Thứ hai, ViewModel không thể cho biết sự khác biệt giữa các sự kiện OnNavigatedFrom và OnNavigatedTo mà không cần phải tạo một tập hợp các lớp bao bọc cho đối tượng PhoneApplicationPage (xem UPDATE bên dưới).
Cách thân thiện nhất với MVVM-Light để xử lý những sự kiện này là gì?
UPDATE: tôi đã có thể giải quyết vấn đề thứ hai bằng cách gửi tin nhắn như thế này:
protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Send<PhoneApplicationPage>(this,"NavigatedFrom");
base.OnNavigatedFrom(e);
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
Messenger.Default.Send<PhoneApplicationPage>(this, "NavigatedTo");
base.OnNavigatedTo(e);
}
và Đăng ký chúng như thế này:
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedFrom", false, (action) => SaveState(action));
Messenger.Default.Register<PhoneApplicationPage>(this, "NavigatedTo", false, (action) => RestoreState(action));
Không phù hợp với MVVM Light. Tôi chỉ nghĩ về thời gian thực hiện. Chuyển từ VIEW sang ViewModel thông qua ViewModelLocator –