WPF контроль и разбор / привязка к заданной строке - PullRequest
0 голосов
/ 23 декабря 2009

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

Допустим, у вас есть строка "1.5678". Элемент управления должен отображать строку следующим образом в трех текстовых полях:
textField1 = "1.5"
textField2 = "67"
textField3 = "8"

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

"145,670"
textField1 = "145."
textField2 = "67"
textField3 = "0"

"15,839"
textField1 = "15."
textField2 = "83"
textField3 = "9"

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

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

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 декабря 2009

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

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

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

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

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

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

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

0 голосов
/ 23 декабря 2009

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

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

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

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