WPF DataGrid-具有PropertyChanged的DataGridTextColumn十进制/双精度/浮点输



在UpdateSourceTrigger=PropertyChanged的DataGridTextColumn中,我遇到了小数(双精度/浮点(输入问题。

(1( 我已经搜索了几个网站,许多人建议将其更改为LostFocus。我对这个实现不太感兴趣,因为PropertyChanged的行为正是我所需要的。除非有一种方法可以使用LostFocus获得相同的结果??

我读过以下关于stackoverflow的文章-链路1、链路2、链路3、链路4、链路5&链路6

(2( 如链接4中的评论所述,使用Binding="{Binding StringFormat=N2}"或其变体具有非常令人讨厌的行为。

(3( 另一种方法是允许字符串输入,并在后端将其解析为double。这很好,我只是把它作为最后的解决方案。

(4( 最后,在同一个链接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在链接2-中正确地指出了这一点

UpdateSourceTrigger=PropertyChanged在按键。以小数点结尾的数字无效。改变将UpdateSourceTrigger设置为LostFocus(与删除它相同(或尝试键入"."而后面还有其他数字。

一个老问题,但我想分享一个奇怪的解决方案:(改变">UpdateSourceTrigger=PropertyChanged";通过">UpdateSourceTrigger=LostFocs";将允许使用十进制值。

我做了很多研究,没有找到解决方案。因此,使用选项3-允许字符串输入并在后端处理它。

您可以尝试此操作,在WPF应用程序构造函数中添加此代码。

public App()
{
FrameworkCompatibilityPreferences
.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
}

或者,如果使用Binding,请尝试添加Delay,如1或2秒。这将在验证开始之前延迟验证。

<DataGridTextColumn
Header="Age"
Binding="{Binding Path=Age, Delay=1000,
Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=true}" >

相关内容

最新更新