Должен ли я следовать MVVM при создании пользовательского элемента управления - PullRequest
2 голосов
/ 30 июля 2011

Я воссоздаю небольшое приложение в WPF и пытаюсь использовать MVVM там, где это имеет смысл. Я начал с того, что думал, что буду использовать его 100% времени, и пока у меня есть, но я пришел к выводу, что строгий MVVM (без какого-либо кода) не обязательно является положительным моментом.

Теперь я пытаюсь создать пользовательский элемент управления, который будет привязываться к списку и создавать обычную кнопку для каждого элемента в списке. (По сути, я воссоздаю список, но с другим стилем.) Я делаю этот пользовательский элемент управления специально, чтобы не создавать кнопки на лету в коде позади главного окна, но я думаю, что, поскольку все по существу " представление ", и вся логика будет сделана в другом месте, я могу просто добавить кнопки в коде позади, без технической поломки MVVM. Правильно ли это мышление, глубоко ошибочно или где-то посередине? Спасибо за любую помощь!

Ответы [ 3 ]

6 голосов
/ 30 июля 2011

строгий MVVM (никакого кода позади)

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

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

<ItemsControl ItemsSource="{Binding YourCollection}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Text}" Command="{Binding DoSomethingCommand}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
3 голосов
/ 31 июля 2011

При изучении MVVM обычно лучше начинать с консервативной стороны. Слепое высказывание MVVM для всего ставит телегу перед лошадью. Вместо этого делайте вещи так, как вам удобно. Целью паттерна является устранение трения от разработки. Когда вы видите трения от того, как вы делаете вещи, которые может решить шаблон, то самое время использовать шаблон. Как только вы увидите преимущества использования MVVM, вы почувствуете, когда применять его превентивно и когда вы можете отложить принятие этого решения. Кроме того, к тому времени вы уже будете достаточно знакомы с ним, так что на самом деле его будет проще использовать, чем другой маршрут.

По вашему конкретному вопросу, решение получено, вам не нужен код или модель представления, потому что шаблоны WPF позаботятся об этом за вас. Я бы посоветовал узнать больше о системе шаблонов в WPF, она достаточно мощная и приводит к более элегантным решениям.

2 голосов
/ 30 июля 2011

Предложение «Я думаю, что, поскольку все по сути является« представлением », и вся логика будет сделана в другом месте, я могу просто добавить кнопки в коде без технического разбивания MVVM», я как бы сам по себе противоречив , Если предположить, что кнопка имеет значение UI, а чистый UI - это XAML, а код вместо этого является видом model и modelview, вы перемещаете пользовательский интерфейс в codebehind. Я, по сути, подумал бы сделать настройку UI в XAML, насколько это возможно. Используйте стандартный ListView / ListBox элемент управления и настройте его. Это немного сложнее, чем просто добавлять кнопки в цепочке, но определенно больше stable , так как многие вещи уже продуманы в готовых элементах управления, и единственное, что вам нужно, это настроить внешний вид элементов , в которую входит удивительная мощь WPF.

Короче говоря: я использую стандартные элементы управления и настраиваю внешний вид элементов внутри XAML.

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...