(1) 我搜索了几个网站,很多人建议将其改为LostFocus。我对这个实现不是很感兴趣,因为PropertyChanged的行为正是我所需要的。除非有办法用LostFocus获得相同的结果??
我读过以下关于stackoverflow的文章-
Link 1
Link 2
Link 3
,
Link 4
Link 5
&
Link 6
(2) 使用
Binding="{Binding StringFormat=N2}"
链接4
.
(3) 另一种方法是允许字符串输入,并在后端将其解析为double。这很好,我只是把它作为最后的解决办法。
(4) 最后,同样
,xmedeko提到的解决方案-
System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
如果有任何其他更整洁的方法,同时保持类似于PropertyChanged的行为,将非常有用。
代码
XAML-
<DataGridTextColumn Header="Rate" Binding="{Binding Path=Rate, UpdateSourceTrigger=PropertyChanged}" Width="90"/>
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重新评估每个
击键。以小数点结尾的数字无效。改变
将UpdateSourceRigger安装到LostFocus(与删除它相同)或尝试
键入“.”,后面还有其他数字。