2015-06-12 5 views
7

У меня есть проект WPF и нужно создать элемент управления, специфичный для домена, но будет повторно использоваться во множестве представлений.Элементы управления WPF. Следует ли избегать каких-либо кодов за любой ценой?

Элемент управления должен отображать десятичное значение в 3 частях, неотъемлемая часть и десятичная часть разделены на 2 с разными размерами шрифта. У меня есть свойство зависимости для суммы, а затем разделить сумму на 3 части кода, чтобы я мог показать их в конкретных ярлыках. Я также использую десятичную сумму, чтобы решить, будет ли она увеличиваться или уменьшаться, а затем менять цвет фона элемента управления. Все это делается в коде позади. Я знаю, что некоторые говорят, что код позади - это зло, и я согласен в большинстве случаев. Как бы вы это не реализовали?

+0

«десятичная часть разделена на 2 с разными размерами шрифтов» - не могли бы вы объяснить это немного дальше? – goobering

+1

Это деталь и на самом деле не имеет никакого значения для вопроса. Представьте, что мне нужно отображать первые 3 десятичные точки впереди 10, а остальные - в шрифте 8. – Klaws86

ответ

12

Нет, его не следует избегать при все расходы.

Помните, Данные Данные, UI UI.

Например, если у вас есть код, который только UI, тогда нет ничего плохого в том, что у него есть код.

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

Чтобы более точно ответить на ваш вопрос, нет ничего плохого в том, что вы сделали.

EDIT

Позвольте мне объяснить далее.

Изображение сцены, у вас есть вид, с кнопкой, которая должна начинаться с Storyboard, когда она была нажата. (Конечно, вы можете сделать это только в XAML, но это только пример)

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

Однако предположим, что ваша кнопка должна изменить свойство в вашем ViewModel при нажатии. Вы не должны достать DataContext в коде. Вам нужно будет использовать Command, потому что вам нужно оставить . Посмотреть, отделенный от ViewModel.

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

Все, что сказано, MVVM - это шаблон , а не закон.

+0

Согласовано. Я только резервирую исполнение для тех, кто предпочитает использовать Windows Forms, когда они предпочитают WPF. – Falanwe

+0

Я согласен с этой философией на 100%. Однако некоторые утверждают, что все, что можно сделать с помощью кода позади, можно сделать в XAML (например, пример вашей истории). Есть ли какая-нибудь конструкция XAML, которая может помочь сделать это? – Klaws86

+0

@ Klaws86 Not * everything * имеет только решение XAML, и я уверен, что все, что вам нужно, не имеет решения XAML. Код-позади есть причина, в то время как XAML чувствует себя невероятно профессионально, иногда просто невозможно достичь этого, и ** это не плохо. **. Помогая вам создать элемент управления, который делает то, что вам нужно, выходит за рамки вашего вопроса, было бы лучше спросить новый вопрос, если вы застряли. –

0

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

"{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Integral}" 

"{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Decimal1}" 

"{Binding Amount, Mode=TwoWay, Converter={StaticResource AmountSplitterConverter},ConverterParameter=Decimal2}" 

Позвольте мне знать, если вам нужна дополнительная помощь в осуществлении его или, если это не ясно.

+0

Спасибо за это, к сожалению, мне нужно значение Amount и предыдущее значение, чтобы он мог выполнять логику шрифта на элементе управления, поэтому это разрешит только половину проблемы. – Klaws86

Смежные вопросы