Подтвердить что ты не робот

Одно предложение для MVVM в WPF?

Я слышал, что это лучшая вещь для создания пользовательских интерфейсов WPF, но все существующие примеры имеют десятки строк кода - могу ли я получить Hello World для MVVM, который недвусмысленно объясняет, что все это значит? Я тоже довольно новичок в С#/. Net, так что, возможно, укажите мне некоторые ресурсы, которые тоже могут помочь?

Очень ценно!

4b9b3361

Ответ 1

Одно предложение:

MVVM - это переосмысление хорошо подобранного шаблона Model-View-Presenter (MVP), разработанного специально для работы с объектами привязки данных, поставляемыми с WPF, для разделения логики приложений от дизайна пользовательского интерфейса.

Более продолжительное, полезное объяснение:

Основная концепция MVVM - это разбить приложение WPF на отдельные компоненты, каждый из которых несет одну ответственность в процессе получения информации на экране.

Во-первых, у вас есть модель. Это класс с очень ограниченными функциями, который обычно заполняется из какого-то внешнего источника, такого как база данных или веб-сервис. Например:

public class MessageModel
{
    public string Message { get; set; }
}

Кроме того, вы размещаете ViewModel, здесь находится логика приложения, она уведомляет о представлении изменений в модели и обеспечивает согласованность данных. При реализации интерфейса INotifyPropertyChanged двухсторонняя привязка данных между ViewModel и представлением предоставляется бесплатно WPF:

public class MessageViewModel : INotifyPropertyChanged
{
     private MessageModel _model;

     public string Message
     {
          get { return _model.Message; }
          set
          {
              if (_model.Message != value)
              {
                  _model.Message = value;
                  OnPropertyChanged("Message");
              }
          }
     }
}

Наконец, у вас есть представление. Это файл xaml, который описывает компоновку элементов управления, используемых для отображения и редактирования данных в ViewModel:

<Canvas>
     <TextBox Text={"Binding Message"} />
</Canvas>

Причина, по которой вы прилагаете все усилия, состоит в том, что Модель очень легкая и легко проходит через границы домена. Его можно просто отправить или получить из веб-службы или сопоставить его с таблицей базы данных. ViewModel, с другой стороны, является сложным, но имеет несколько зависимостей - ему все равно, где модель получает данные, только то, что оно есть, и у него вообще нет понятия представления, что делает его очень проверяемым ( логика вашего приложения не зависит от пользовательского интерфейса для тестирования). Наконец, xaml хорошо разбирается и может быть передан дизайнеру, который ничего не должен знать о логике приложения, только то, что ViewModel представит определенные данные под определенными именами. Эта инкапсуляция позволяет легко определять роли в больших проектах или собирать ограниченный пользовательский интерфейс для проверки логики, пока реальный полируется.

Ответ 2

MVVM - связь звезда-веер. Вентилятор знает звезду, но звезда не знает вентилятора. Фанат любит свою звезду так сильно, что, если звезда меняет себя (я имею в виду его стиль одевания), фанат меняет себя соответственно.

Теперь замените "звезду" на "ViewModel" и "fan" на "View" и прочитайте еще раз.

Ответ 3

Одно предложение? Здесь идет.

MVVM - это структура сегрегации пользовательского интерфейса, в которой Xaml (View) привязывается к фасаду (View Model), позволяя кишкам вашей программы (модели) избегать проблем с пользовательским интерфейсом.

Ответ 4

Простым утверждением, которое помогло мне лучше разобраться в этом, было "Могла ли я unit test моя бизнес-логика без пользовательского интерфейса?" Я думаю, что это должен быть вопрос, который вы задаете при обучении и разработке с использованием концепций MVVM.

Ответ 5

Этот сайт имеет большую диаграмму, которая объясняет это.

В основном у вас есть 3 компонента:
1) Модель. Модель данных вашего приложения. это довольно стандартный и тот же, что и любое приложение MVP или MVC.
2) Вид - XAML, который определяет представление/расположение вашего приложения.
3) Модель просмотра. Поскольку WPF требует, чтобы представление было привязано к вещам определенным образом (например, требуется, чтобы коллекции реализовывали INotifyCollectionChanged и тому подобное), обычно требуется, чтобы вы немного массировали свои данные, чтобы получить его в форме, подходящей для отображения. Здесь вводится модель представления. Она упаковывает данные в модели просмотра, которые можно легко отобразить. Это то, к чему будет привязан ваш взгляд XAML. Он должен реагировать на события с уровня модели и сам обновлять.

(Тогда ваши контроллеры где-то висят - в идеале с помощью команд WPF - и вносят изменения в модель, которая запускает события для обновления модели представления)

Ответ 6

шаблон, в котором интерфейс (вид) и бэкэнд (модальный) обмениваются (взад и вперед) с использованием общего медиатора (вид-модальный).

Ответ 7

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

Ответ 8

Я бы сказал что-то вроде: "Схема представления для разделения озабоченности между пользовательским интерфейсом и логикой"

Ответ 9

Улучшенный ответ:

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

Собственно, MVVM - это усовершенствование шаблона, который был вокруг в течение некоторого времени. Я помню, как развивалась модель, когда я работал в MFC. Для этого есть как минимум две причины. MFC или < > является довольно сложным, и смешивание конструкций MFC с вашей логикой приложения делает приложение более хрупким. Пример: замена списка с помощью combobox (или селектора в современных терминах) намного сложнее, если логика поддержки содержимого списка/селектора сочетается с логикой для управления самим списком/селектором.

Ответ 10

Некоторые действительно хорошие одно-предложение (или близко к нему) объяснения уже. Я просто добавлю к этому, сказав, что если вы пройдете базовый уровень, и вам нужен пример использования MVVM в реальном приложении, в котором есть меню, панель инструментов, диалоговые окна параметров, окна инструментов для стыковки и т.д., посмотрите SoapBox Core и эту демонстрацию с использованием SoapBox Core. Он открыт, поэтому вы можете получить много идей.

Ответ 11

Поскольку вы не можете привязать данные к своему собственному кодовому блоку

(здесь только шутка)