Одно предложение для MVVM в WPF?
Я слышал, что это лучшая вещь для создания пользовательских интерфейсов WPF, но все существующие
примеры имеют десятки строк кода - могу ли я получить Hello World
для MVVM, который недвусмысленно объясняет, что все это значит?
Я тоже довольно новичок в С#/. Net, так что, возможно, укажите мне некоторые
ресурсы, которые тоже могут помочь?
Очень ценно!
Ответы
Ответ 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
Поскольку вы не можете привязать данные к своему собственному кодовому блоку
(здесь только шутка)