WPF DataGrid - ввод десятичных / двойных / плавающих чисел DataGridTextColumn с помощью PropertyChanged - PullRequest
0 голосов
/ 15 ноября 2018

У меня проблемы с десятичными (двойными / плавающими) входами в 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 (так же, как его удаление) или попробуйте ввести '.'пока у вас есть другие цифры после него.

1 Ответ

0 голосов
/ 02 декабря 2018

Я провел немало исследований и не нашел решения.Так что с вариантом 3 - разрешить ввод строки и обработать его в бэкэнде.

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