Я разрабатываю приложение, которое будет доступно для Windows Phone 8 и Windows Store. Чтобы уменьшить избыточность, я использую портативную библиотеку классов (PCL), и, кроме того, я пытаюсь применить шаблон MVVM с помощью инструмента MVVM Light PCL Toolkit. ViewModels помещаются в PCL и напрямую связаны с XAML на страницах приложений.Использование MessageDialog/MessageBox с портативной библиотекой классов и MVVM Light
Когда данные получены без ошибок, все работает нормально. Но я не знаю, как вернуть сообщение об исключениях/ошибках в приложение, когда происходят ошибки.
Внутри приложения Windows Store ошибки приложения отображаются как MessageDialog, в то время как приложение Wp8 будет использовать класс MessageBox. Очевидно, что PCL не знает ни одного из этих классов. То, что я не получаю, - это узнать, возникла ли в ViewModel ошибка и как получить сообщение внутри приложения. Возможно ли это, когда ViewModels связаны внутри XAML?
Код в ViewModel (внутри PCL) выглядит следующим образом:
DataService.Authenticate((token, error) =>
{
if (error != null)
{
// This is, obviously, not going to work.
MessageBox.Show(error.Message);
return;
}
Token = token;
});
Так что я должен сохранить ошибка как-то и пусть сам App знать произошла ошибка , а затем вызовите соответствующий способ отображения ошибки пользователю.
В настоящее время я думаю о чем-то вроде определения свойства Error внутри BaseViewModel и заполняет его, когда возникают ошибки в ViewModel. Затем, в CodeBehind на страницах, сообщите им о текущем ViewModel и привяжите событие PropertyChanged к этому Свойству Error. Но я еще не смог его реализовать, поэтому я не знаю, правильно ли это подходит.
Должен ли я отказаться от идеи связать ViewModels внутри XAML, и вместо этого я должен инициализировать их внутри страниц Codebehind?
Спасибо, это помогло. В моей текущей реализации теперь используются интерфейсы для настроек, обмена сообщениями и т. Д., Которые находятся внутри PCL. Затем, внутри проекта W8/WP8, я реализую их для своей платформы и автоматически вставляю их в свою ViewModelBase. Однако я посмотрю на сообщения MVVM Lights. После первого быстрого просмотра может отсутствовать возможность использовать особенности платформы, такие как WP8 MessageBoxButton, но я могу что-то упустить. – hmpf