2015-08-18 3 views
3

В настоящее время я работаю над новым проектом C# с использованием WPF и MVVM связанных функций и инструментов платформы .NET. Я совершенно не знаком с разработкой этого типа приложений. После того, как я начал изучать такие вещи, как ICommand и INotifyPropertyChanged, я заметил, что пока я копаю эти классы и пространство имен System.Windows.Input, я действительно отхожу от переносимости.WPF MVVM программирование в портативной библиотеке классов

Прежде чем я застрял с MVVM Я использовал для создания портативной библиотеки классов для бизнес-уровня моего приложения.

Являются ли эти классы MVVM от PresentationCore.dll хорошо поддерживаемыми в других платформах, таких как андроид Xamarin и iOS и Mac? Если я использую ICommand, CommandManager и другие классы в переносимой библиотеке классов, могу ли я использовать реализованную библиотеку на других упомянутых платформах?

Что я хочу сказать, удалив от переносимости?

Например, мы хотим разработать приложение, которое должно быть портативным для окон и платформ Android. когда я реализую ICommand Я могу использовать только команду с элементом управления WPF, хотя я легко могу вызвать метод в обработчике события щелчка кнопки в приложении xamarin android. Таким образом, в этом примере ICommand бесполезен в приложении Xamarin android.

Не могли бы вы рассказать мне, что мы должны учитывать при программировании MVVM в переносной библиотеке классов? Что общего у MVVM и PCL? А когда их концепции и особенности сидят непросто друг с другом?

+1

Прежде всего, см. [MVVMCross] (https://github.com/MvvmCross/MvvmCross). –

+1

Представления не являются переносимыми вообще, поскольку они сильно зависят от структуры представления. Imho, поскольку модели просмотра должны предоставлять данные и поведение таким образом, которые легко расходуются из представлений, ViewModels также не переносимы. Однако вы могли бы извлечь свою общую логику из режимов просмотра в PCL, а viewmodels были бы тогда очень тонким фрейм-специфическим слоем. Из вашего значения это влияет на вашу архитектуру MVVM – Liero

ответ

3

Короткий ответ: переносимость не была одной из основных целей дизайна WPF. От the MSDN site: «Основная задача Windows Presentation Foundation (WPF) - помочь разработчикам создавать привлекательные и эффективные пользовательские интерфейсы». В частности, это поможет разработчикам создать пользовательские интерфейсы для Windows, следовательно, W. И учитывая слабое, но все же неявное сцепление между моделью просмотра и представлением, что означает, что ваш лучший выбор для переносимости IMO в вашей модели и, возможно, ваш ORM. До тех пор, пока вы придерживаетесь хороших методов СОЗ, это, вероятно, лучшее, что вы получите, не полагаясь на стороннее решение ... которое чаще всего снижает переносимость и в то же время добавляет много головной боли в другом месте.

2

Ваша мобильность не имеет ничего общего с WPF.

Команды (ICommand) и ViewModels (INotifyPropertyChanged) являются переносимыми и не зависят от самого WPF, по крайней мере, от новых .NET Framework.

Призма, практика Microsofts & Шаблоны MVVM Framework переносимы. Работает на рабочем столе, Windows Phone/Mobile, WPF, Silverlight и Xamarin.

Ваши взгляды не предназначены для переноски. Xamarin выпустила Xamarin Forms некоторое время назад, что похоже на разработку WPF/Windows Phone, поскольку использует XAML для пользовательского интерфейса и поддерживает привязку данных (следовательно, также поддерживает привязки ICommand и ViewModel).

Вы не должны использовать старую систему интерфейса Xamarin, если хотите разработать приложение MVVM.

Чтобы ваша портативная библиотека/сборка, содержащая ваши модели и команды, не позволяла ссылаться на Presentation.dll и другие сборки WPF.

Если это так, вы нарушаете принцип MVVM, и ваш код не будет переносимым. В этом случае вам нужно реорганизовать свой код и лучше понять MVVM. Это определенно возможно иметь ViewModels и Commands без ссылки на WPF.

Смежные вопросы