2009-12-23 2 views
0

Я новичок в WPF и пытаюсь создать элемент управления WPF, который отображает строку (которая всегда будет числом) определенным образом. На элементе управления будет три разных текстовых поля, и строка должна быть разделена на три различных компонента, следующие по следующим правилам:WPF-контроль и синтаксический анализ/привязка к заданной строке

Допустим, у вас есть строка «1.5678». Контроль должен отображать строку следующим образом, в три текстовых поля:
textField1 = «1,5»
поля 2 = «67»
поля 3 = «8»

правило таково, что поля 3 всегда будет содержать последний символ, textField2 будет содержать два символа перед последним, а textField1 будет содержать остальные. Вот еще несколько примеров:

"145.670"
textField1 = "145."
= текстового поля 2 "67"
текстового поля 3 = "0"

"15,839"
textField1 = "15."
= текстового поля 2 "83"
текстового поля 3 = "9"

Предположим, что строка всегда будет содержать по крайней мере 4-х символов.

Теперь, можно ли использовать новые функции привязки WPF для этого автоматически? Могу ли я привязать элемент управления WPF к некоторому свойству, содержащему строку, и чтобы текстовые поля отображали его, как я описал?

Благодаря

ответ

0

Вы можете сделать это с помощью связывания (для одного свойства), с помощью IValueConverter для вашего связывания. Документы для IValueConverter дают примерную реализацию.

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

Обратите внимание, что вы можете сделать это, используя три отдельных класса преобразователя или один класс с перечислением, в котором указана какая часть отображаться (что потребует еще три уникальных экземпляра).

+0

Использование конвертера значений не позволит использовать двустороннюю привязку, потому что невозможно определить все значение на основе только той части, которая была изменена. –

+0

Нет, но он специально упомянул только о DISPLAY строки - он не указал, что ему нужно отредактировать строку. –

0

Да, это должно быть возможно.

  1. Создать пользовательский элемент управления.

  2. Создать свойство зависимостей (Text/TextProperty) в вашем управлении, который будет содержать строку (вы можете позже данные связываются с этим свойством при использовании своего контроля).

  3. Создайте converter, который преобразует полную строку в нужную часть (на основе некоторого свойства, например, PartNumber, преобразователя).

  4. В XAML вашего управления создайте три экземпляра вашего конвертера с разными номерами деталей в качестве статических ресурсов.

  5. Затем используйте привязку ({Binding ElementName=myControl, Path=Text, Converter={StaticResource FirstPartConverter}}), которая привязывает текстовое поле в вашем элементе управления к свойству зависимости, используя правильный конвертер.

Не стесняйтесь спрашивать в комментариях, если какой-либо шаг не ясен.

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