我在使用UpdateSourceTrigger = PropertyChanged的DataGridTextColumn中输入十进制(双精度/浮点数)时遇到麻烦。
(1)我搜索了几个站点,许多建议将其更改为LostFocus。我不太热衷于此实现,因为PropertyChanged的行为是我所需要的。除非有一种方法可以让LostFocus获得相同的结果?
我已阅读以下有关stackoverflow的文章- Link 1,Link 2,Link 3,Link 4,Link 5和Link 6
(2)使用Binding="{Binding StringFormat=N2}"
或其变体会引起非常烦人的行为,如Link 4中的注释所述。
(3)另一种方法是允许字符串输入并将其在后端解析为double。这很好,我仅将其作为最后的解决方案。
(4)最后,在同一Link 4中,xmedeko提到的解决方案-System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
仅适用于.NET 4.5或更高版本。
我确实有较新的版本,但不确定如何/在何处实现这一行代码。还是有办法在XAML本身中将此属性设置为false?任何帮助是极大的赞赏。由于我的声誉水平,无法回复该链接作为评论。
如果还有其他更整洁的方式同时保持类似于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不接受十进制值,这由Chevul Ervin在Link 2-
中正确记录UpdateSourceTrigger = PropertyChanged重新评估每个 击键。以小数点结尾的数字无效。更改 将UpdateSourceTrigger更改为LostFocus(与删除它相同)或尝试 输入“。”而后面还有其他数字。
答案 0 :(得分:0)
我做了很多研究,没有找到解决方案。因此,使用选项3-允许字符串输入并在后端处理它。
答案 1 :(得分:0)
一个老问题,但我想分享奇怪的解决方案:) 通过“UpdateSourceTrigger=LostFocus”更改“UpdateSourceTrigger=PropertyChanged”将允许使用十进制值。