Вопрос по mvvm, user-interface, design-patterns, wpf – Одно предложение объяснение MVVM в WPF?

34

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

Очень признателен!

Ваш Ответ

11   ответов
1

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

14

Одно предложение? Вот оно.

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

+1 Ха-ха. Классический разработчик программного обеспечения. Вы дали пользователю именно то, о чем он просил, но оказывается, что это ему совсем не выгодно, и, вероятно, это не то, что он действительно хотел. (Заставил меня смеяться, хотя) = :)
73

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

Более длинное, более полезное объяснение:

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

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

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

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

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 представит определенные данные под определенными именами. Эта инкапсуляция позволяет очень легко определять роли в больших проектах или создавать ограниченный пользовательский интерфейс для проверки логики, пока реальный обрабатывается.

Фантастический ответ. Спасибо за простое объяснение того, что может быть сложной темой
@MartinHarris вы сказали, что модель получена из веб-сервиса или базы данных? Где мы должны разместить этот логический код? По виду модель?
Пример IMO, MVVM без команд недостаточно полный
38

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

Теперь замените & quot; звездочку & quot; с & quot; ViewModel & quot; и «фанат» с & quot; Просмотр & quot; и прочитайте это еще раз.

красивое объяснение .. легко понять начинающих, как я
8

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

0

лизко к нему) уже. Я просто добавлю к этому, сказав, что если вы прошли базовый уровень и хотите получить пример того, как использовать MVVM в реальном приложении, которое имеет меню, панель инструментов, диалоги параметров, окна инструментов закрепления и т. Д. , Взгляни наSoapBox Core и этодемо с использованием SoapBox Core, Это с открытым исходным кодом, так что вы можете получить много идей.

0

(только половина шутит здесь)

4

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

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

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

0

«Шаблон представления для разделения проблем между пользовательским интерфейсом и его логикой».

1

aml-дружественным промежуточным объектом, чтобы получить ваши xaml-недружественные фактические данные.

0

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

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

Похожие вопросы