WPF DataGrid-具有PropertyChanged

时间:2018-11-15 04:49:27

标签: c# wpf data-binding datagrid

我在使用UpdateSourceTrigger = PropertyChanged的DataGridTextColumn中输入十进制(双精度/浮点数)时遇到麻烦。

(1)我搜索了几个站点,许多建议将其更改为LostFocus。我不太热衷于此实现,因为PropertyChanged的行为是我所需要的。除非有一种方法可以让LostFocus获得相同的结果?

我已阅读以下有关stackoverflow的文章- Link 1Link 2Link 3Link 4Link 5Link 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(与删除它相同)或尝试   输入“。”而后面还有其他数字。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

一个老问题,但我想分享奇怪的解决方案:) 通过“UpdateSourceTrigger=LostFocus”更改“UpdateSourceTrigger=PropertyChanged”将允许使用十进制值。

相关问题