Могу ли я использовать IFormatProvider с привязкой WPF к пользовательскому типу?

У меня есть пользовательский тип (SINumber, который представляет число SI с соответствующими единицами измерения и префиксом). Я могу привязаться к штрафу SINumber и переопределить SINumber.ToString(), но то, что отображается, является результатом вызова SINumber.ToString().

Например, SIMeasurement имеет тип SINumber со значением SI 3099999,9046325684 Ом. Используя следующую привязку, я получаю выход 3,09999990463257 МОм.

<TextBlock Text="{Binding SINMeasurement}"></TextBlock>

Единицы (Ом) и префикс (М = мега) разговор правильный, проблема с количеством отображаемых цифр. Я хочу иметь возможность использовать пользовательский форматтер (реализующий IFormatProvider ICustomFormatter?) для интерпретации StringFormat из привязки и включить мою SI-логику (изменение префикса) для отображения 3,10 МОм. Ниже приведен пример привязки, которую я хотел бы использовать, где точность можно настраивать (в данном случае 0,00), а расположение единиц определяется буквой «U».

<TextBlock Text="{Binding SINMeasurement, StringFormat='{}{0:0.00 U}'}"></TextBlock>

Есть предположения? Я не хочу использовать жестко закодированный SINumber.ToString(), так как желаемая точность будет различаться в разных местах приложения.

Заранее спасибо.


person Peter    schedule 10.10.2012    source источник


Ответы (1)


Сделайте так, чтобы ваш тип данных реализовывал интерфейс IFormattable. Его метод public string ToString(string format, IFormatProvider formatProvider) будет вызываться каждый раз, когда Binding преобразует ваш объект в строку, используя StringFormat, указанный вами для Binding.

person daerhiel    schedule 28.10.2012