【问题标题】:WPF DataGrid - DataGridTextColumn decimal/double/float input with PropertyChangedWPF DataGrid - 带有 PropertyChanged 的​​ DataGridTextColumn 十进制/双精度/浮点输入
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 1970-01-01
      • 2010-10-11
      • 2016-12-14
      • 2016-08-17
      • 2014-08-14
      相关资源
      最近更新 更多