В нашем проекте у нас есть текстовое поле WPF, связанное с двойным. Существует конвертер, который позволяет в конвертировании использовать, например, «.». и «,» в качестве десятичных точек, а в методе преобразования он форматирует двойной формат в n2. Здесь вы можете увидеть simplefied версию нашего конвертера:Конвертер текстовых файлов Wpf, чтобы удвоить в сочетании с updatesourcetrigger = propertychanged
public class DoubleConverter:IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || value.GetType() != typeof(double))
return null;
else
return ((double)value).ToString("n2");
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return null
else
return Double.Parse(((string)value).Replace('.',','));
}
}
Текстовое поле выглядит следующим образом:
<TextBox Text="{Binding Path=Factor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" Width="500" Height="50" />
И двойное свойство поднимает PropertyChanged событие:
public double Factor
{
get { return _factor; }
set
{
_factor = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Factor"));
}
}
Это используется отлично работать в предыдущих версиях WPF, потому что конверт не был вызван при вводе текста. Это поведение, по-видимому, изменилось, и теперь метод конвертации вызывается для каждой текстовой записи, в результате чего двойной форматируется при вводе чего-то. Даже если вы не используете форматирование, у вас есть проблема неспособности ввести десятичную точку.
Этого можно решить, не используя UpdateSourceTrigger = Propertychanged, но нам нужно это для проверки. Мы реализуем проверку с помощью IDataErrorInterface. Я знаю, что есть ValidateWithoutUpdate method, но это не работает для проверки с помощью IDataErrorInterface.
Так что мне в основном нужна ConvertBack (и, следовательно, проверка), чтобы произойти OnPropertyChanged и преобразовать только в OnLostFocus.
Возможно ли это? Или есть другое решение для нашей проблемы?
Спасибо, я закончил создание специального элемента управления;) – user2039673