【发布时间】:2019-04-18 03:37:12
【问题描述】:
我在 DataGridTextColumn 中使用 UpdateSourceTrigger=PropertyChanged 输入十进制(双精度/浮点)时遇到问题。
(1) 我搜索了几个网站,许多人建议将其更改为 LostFocus。我对这个实现不是很热衷,因为 PropertyChanged 的行为是我所需要的。除非有办法通过 LostFocus 获得相同的结果??
我已阅读有关 stackoverflow 的以下文章 - Link 1, Link 2, Link 3, Link 4, Link 5 & Link 6
(2) 使用Binding="{Binding StringFormat=N2}" 或其变体具有非常烦人的行为,如Link 4 中的cmets 所述。
(3) 另一种方法是允许字符串输入并在后端将其解析为双精度。这很好,我只是把它作为最后的解决方案。
(4) 最后在同一个Link 4 中,xmedeko 提到的解决方案 - System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false; 仅适用于 .NET 4.5 或更高版本。
我确实有较新的版本,但不确定如何/在哪里实现这行代码。或者是否有办法在 XAML 本身中将此属性设置为 false?任何帮助是极大的赞赏。由于我的声誉等级,无法作为对该链接的评论回复。
如果在保持类似于 PropertyChanged 的行为的同时有任何其他更简洁的方法,那将非常有帮助。
代码
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 不接受十进制值,Chevul Ervin 在Link 2 中正确指出了这一点-
UpdateSourceTrigger=PropertyChanged 重新评估每个 击键。以小数点结尾的数字无效。改变 UpdateSourceTrigger 到 LostFocus (与删除它相同)或尝试 键入“。”而你后面还有其他数字。
【问题讨论】:
-
如果您显示您的代码尝试会更好,这样我们就可以检查您面临的问题。没有代码有点困难。
-
我已按要求用代码更新了主帖。
标签: c# wpf data-binding datagrid