代码之家  ›  专栏  ›  技术社区  ›  Bandook

WPF DataGrid-DataGridTextColumn decimal/double/float输入,属性已更改

  •  0
  • Bandook  · 技术社区  · 7 年前

    (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(与删除它相同)或尝试 键入“.”,后面还有其他数字。

    1 回复  |  直到 7 年前
        1
  •  1
  •   hatem87    5 年前

    一个老问题,但我想分享一个奇怪的解决方案:) 改变” UpdateSourceTrigger=LostFocus

        2
  •  0
  •   Bandook    7 年前

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

    推荐文章