4

Я только начал разрабатывать универсальное приложение. Я разработал приложение в приложениях для хранения Windows 8, а также разработал приложения для Windows Phone 8 и Windows Phone 8.1 (SilverLight). Вопрос связан с универсальным приложением в Windows и едином пользовательском интерфейсе, который создается в приложении. Поделиться папкой.Универсальное приложение в окнах MVVM

1. Я новичок в MVVM. Я нормально разработал Windows 8 и WP8.1. Но не с MVVM. Я много искал, но не получил никакого примера, который мог бы лучше понять MVVM. Я знаю, что такое MVVM. Это похоже на MVC Asp.net.

MVVM является

Модель: Какие данные описывают

View-модель: В простом слове мост между моделью и видом.

View: Простая страница или пользовательский интерфейс xaml.

Какой способ лучше или лучше сделать код в Windows Phone 8 MVVM или Normal?

Обычный способ означает использование без использования MVVM.

Ref: Separate UI and app logic using the Model-View-ViewModel pattern

ответ

12

Это широкий вопрос для ответа в одном посте. Я предоставлю пару вещей, чтобы думать и исследовать.

. (Примечание: весь код в этой должности, свободная рука из памяти Это не может быть 100% синтаксический корректно.)

Вы по большей части правильной в вашем определении MVVM. Основное отличие от MVVM и MVC заключается в том, что привязка используется для подключения View to View Model (Controller). Это семантика, хотя и не нужно зависеть от нее.

Неважно, являетесь ли вы WP 7, WP 8, WP8.1, Siverlight или Universal App. Это может быть проще всего начать с WPF, поскольку это когда MVVM был представлен, и быстрее запускать приложение, поскольку оно не запускается в эмуляторе.

Прежде всего, нужно начать с очень простого примера.

1) Создавайте папки «Виды» и «ViewModels». Строго не нужно, но вы захотите их.

2) Создайте пустую страницу с помощью TextBlock. Это файл xaml с кодом. Создайте его в папке «Представления» и назовите его «MyFirstPage». Поместите текстовый блок на это следующим образом:

<TextBlock Text="The Title of my App" /> 

3) Запустите приложение и убедитесь, что этот текст отображается.

4) Создайте класс ViewModel. Это основной файл класса.Создайте его в папке ViewModels и назовите его MyFirstViewModel.

5) Подключить страницу (View) к ViewModel. Вот как выглядит мой код, и по большей части это все, что у меня есть. Установка DataContext в модель представления - это ключ к настройке привязки. Есть много других фреймворков, которые делают эту магию, но это то, что происходит. Это лучшее место, чтобы начать, на мой взгляд.

public class MyFirstPage : Page 
{ 
    private MyFirstViewModel _viewModel = new MyFirstViewModel(); 

    public MyFirstPage() 
    { 
     this.Initialize??? 
     this.DataContext = _viewModel; 
    } 

6) Добавить свойство Title в свою модель просмотра и на данный момент просто вернуть значение жесткого кодирования.

public string Title { get { return "The Title of my App (set from View Model)"; } } 

7) Обновление TextBlock на View, чтобы использовать связывание

<TextBlock Text="{Binding Title}" /> 

8) Запустите приложение, чтобы проверить, что он работает.

Итак, это основа для подключения модели представления к виду и просмотра работы привязки.

Далее, чтобы узнать:

  1. Two Way Binding: Если у вас есть значения, которые настраиваются в пользовательском интерфейсе в TextBox вам нужно будет обновлять связывание выглядеть {Binding FirstName, Mode = TwoWay } в качестве примера, если вы хотите ввести имя.

  2. Наблюдаемые свойства: Еще одна проблема, которую вы обнаружите, заключается в том, что при просмотре логики модели изменения значений связанных свойств значения не будут отображаться в пользовательском интерфейсе. Вы будете тянуть свои волосы, задаваясь вопросом, что не так, но это действительно просто. Пользовательский интерфейс должен быть уведомлен об обновлении. Вы изменили базовое значение, но пользовательский интерфейс не имеет понятия для обновления. Таким образом, для таких свойств, как FirstName, вам нужно будет реализовать INotifyPropertyChanged на вашем ViewModel и в настройщике вашего вызова свойства OnPropertyChanged («FirstName»). Есть много примеров, которые описывают это.

  3. ObservableCollections: Аналогичен наблюдаемые свойства, если у вас есть список элементов, которые подогнаны в модели представления, представление должно быть уведомлено о том, что список изменился. Способ сделать это - сделать свойство ObservableCollection. Опять же, множество примеров. Кончик, который у меня есть, только реализует getter для этих свойств. Вы хотите либо создать коллекцию один раз в конструкторе, либо ленивую загрузку в getter свойства. Если вы когда-либо создадите новый экземпляр ObservableCollection, ссылка на пользовательский интерфейс будет нарушена, и вам придется вызывать OnPropertyChanged для этого, что действительно не нужно, если вы просто используете один экземпляр ObservableCollection, а также и удаленные элементы из него. Вы увидите, что я имею в виду, играя с ним немного. Просто перечитайте это снова.

  4. Преобразователи: Теперь мы переходим на следующий уровень, но чтобы ваш код оставался чистым, вы будете использовать преобразователи и команды реле. Наиболее распространенным преобразователем является BooleanToVisibilityConverter. Это поможет контролировать видимость компонента вида на основе логического значения в вашей модели просмотра. Опять же, вам придется исследовать это.

  5. Релейные команды: Как конвертеры, вам нужны команды реле, чтобы ваш код оставался чистым. Команда relay в основном является привязкой для события click.Вместо того, чтобы иметь обработчик события щелчка в коде позади, у вас будет команда ретрансляции, реализованная в вашей модели ViewModel, и, например, команда Button будет привязываться к свойству RelayCommand в вашей модели просмотра.

После того, как вы исследуете и знакомы с этими товарами, вы будете в хорошем начале.

В некоторых случаях очень сложно избежать кода, но я обнаружил, что мне удалось найти решения для большинства проблем, однако иногда это требует творчества.

Последний комментарий: Моя цель в создании строгой чистой ViewModel заключается в том, чтобы я мог повторно использовать ее через форм-факторы (телефон и планшет). Это возможно, но сложнее, когда вы углубляетесь в более сложные проблемы. Тем не менее, ключевым моментом здесь является то, что у вас есть отдельный проект Lib для ваших ViewModels для жизни. Все мои решения имеют Windows Phone 8.1 Project, проект Windows 8.1 (Store) и переносной проект класса Lib. Папка ViewModels переходит в проект Lib вместе со всем другим кодом, который можно использовать совместно. Чтобы все работало, вам, возможно, придется использовать Inversion of Control, но это тема для другого сообщения.

Удачи и получайте удовольствие,

Том