gpt4 book ai didi

c# - 在 WPF DataGrid 中输入时将逗号替换为点

转载 作者:行者123 更新时间:2023-12-01 22:07:54 26 4
gpt4 key购买 nike

我有一个带有绑定(bind)到 ObservableCollection 的 DataGrid 的 WPF 应用程序。集合类型是包含一个或多个用于十进制值的 double 类型属性的类。在 XAML 中,我定义了 DataGrid-Columns,如下所示:

<DataGrid.Columns>
<DataGridTextColumn x:Name="col_LowerBound"
Binding="{Binding LowerBound, NotifyOnTargetUpdated=True, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
Header="Lower bound"/>
</DataGrid.Columns>

如您所见,我使用的是 UpdateSourceTrigger LostFocus 而不是 PropertyChanged。在 PropertyChanged 的​​情况下,会立即检查所有输入以及像“.”这样的字符。会导致难以置信的情况。通过使用 LostFocus,我可以输入带点的小数。

现在我也想输入逗号并将其替换为点。我可以在 KeyDown 或 PreviewKeyDown 事件发生时进行替换吗?如何替换?我不知道如何在 KeyDown 和类似情况 with TextBox 时替换值没有什么太大的帮助。

最佳答案

我找到了一个真正且简单的解决方案,它使用转换器类。

首先我们需要一个转换器类,它将输入中的任何逗号替换为点。有趣的是,我们必须在 Convert 方法和 ConvertBack 方法中进行相同的替换。 :D

using System;
using System.Globalization;
using System.Windows.Data;

namespace P16_StepFunctions
{
/// <summary>
/// Class for replacing comma by dot in input of decimal fields.
/// </summary>
public class DecimalConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString().Replace(",", ".");
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString().Replace(",", ".");
}

}
}

然后我们在窗口的 XAML 中向转换器类添加资源,如下所示:

<Window.Resources>
<local:DecimalConverter x:Key="decimalconverter"/>
</Window.Resources>

最后,我们将转换器属性添加到所有应包含十进制值的数据网格列的绑定(bind)中。此属性将转换器获取为静态资源。

<DataGridTextColumn x:Name="col_LowerBound"
Binding="{Binding LowerBound, NotifyOnTargetUpdated=True, Mode=TwoWay, UpdateSourceTrigger=LostFocus, Converter={StaticResource decimalconverter}}"
Header="Lower bound"/>

仅此而已。在这些数据网格单元格之一中键入内容时,光标离开单元格后,逗号将替换为点。如果输入错误,例如“1,1,1”,单元格会出现红色边框和错误符号“!”自动显示在数据网格行的左侧。然后用户可以编辑他的错误。

关于c# - 在 WPF DataGrid 中输入时将逗号替换为点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41831651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com