Я думаю, что лучший способ решить эту проблему - использовать ValueConverters.С помощью нескольких простых шагов вы можете написать ValueConverter, который принимает произвольный объект в качестве входных данных, применяет некоторое преобразование и выводит результат.
Эти ValueConverter очень эффективны, и в случае, если вы пишете один преобразователь для одного конкретного преобразования (позаботьтесьвысокой сплоченности) они очень удобны и многократно используются
Что вам нужно, это интерфейс IValueConverter, который вы должны реализовать в своем классе Converter.Преобразование всегда преобразует некоторое A в некоторое B. Таким образом, интерфейс содержит ровно два метода, которые отвечают за преобразование в одном направлении и за обратное преобразование (обратное направление)
Хорошей практикой является написание общего базового класса, которыйвсе ваши конвертеры могут наследовать:
public class ValueConverterBase : IValueConverter {
public virtual object Convert (object value, Type convertTargetType, object convertParameter, System.Globalization.CultureInfo convertCulture) {
return value;
}
public virtual object ConvertBack (object value, Type convertBackTargetType, object convertBackParameter, System.Globalization.CultureInfo convertBackCulture) {
return value;
}
}
Затем вы можете написать свои классы конвертера, которые фактически реализуют код конвертации:
public class NumberConverter : ValueConverterBase {
public override object Convert (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
// code for converting
}
public override object ConvertBack (object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
// code for converting back
}
}
Вы можете найти множество документации и учебных пособий по ValueConverter наИнтернет.
Надеюсь, это поможет:)