У меня проблемы с десятичными (двойными / плавающими) входами в DataGridTextColumn с UpdateSourceTrigger = PropertyChanged.
(1) Я искал несколько сайтов, и многие предлагают изменить это на LostFocus.Я не очень заинтересован в этой реализации, потому что мне нужно поведение с PropertyChanged.Если нет способа получить тот же результат с LostFocus ??
Я читал следующие статьи о stackoverflow - Ссылка 1 , Ссылка 2 , Link 3 , Link 4 , Link 5 & Link 6
(2) Использование Binding="{Binding StringFormat=N2}"
или его вариант имееточень раздражающее поведение, как описано в комментариях в Ссылка 4 .
(3) Другой метод заключается в том, чтобы разрешить ввод строки и проанализировать ее как double в бэкэнде.Это хорошо, и я придерживаюсь его только в качестве крайней меры.
(4) Наконец, в том же Link 4 , решение, упомянутое xmedeko - System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
только для .NET 4.5 или более поздней версии.
У меня есть более новая версия, но я не уверен, как / где реализовать эту строку кода.Или, если есть способ изменить это свойство в самом XAML?Любая помощь очень ценится.Невозможно ответить в качестве комментария по этой ссылке из-за моего уровня репутации.
Если есть какой-либо другой аккуратный способ сохранить поведение, подобное PropertyChanged, было бы очень полезно.
CODE
XAML - <DataGridTextColumn Header="Rate" Binding="{Binding Path=Rate, UpdateSourceTrigger=PropertyChanged}" Width="90"/>
cs -
public void NotifyPropertyChanged(string property)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
public double Rate
{
get { return rate; }
set { rate = value; NotifyPropertyChanged("Rate"); }
}
Код на самом деле очень прост.Это отображается на сетке данных.DataGridTextColumn не принимает десятичные значения, и это правильно отмечено Чевулом Эрвином в Ссылка 2 -
UpdateSourceTrigger = PropertyChanged повторно вычисляет текст при каждом нажатии клавиши.Число, оканчивающееся десятичной точкой, недопустимо.Измените UpdateSourceTrigger на LostFocus (так же, как его удаление) или попробуйте ввести '.'пока у вас есть другие цифры после него.