Pat*_*zer 2 c# wpf xaml datagrid
我有一个带有DataGrid的WPF应用程序,它绑定到ObservableCollection.集合类型是一个类,它包含一个或多个类型为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>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用UpdateSourceTrigger LostFocus而不是PropertyChanged.在PropertyChanged的情况下,输入会立即被检查,并且会出现像"."这样的字符.会导致不可信.通过使用LostFocus,我可以用点输入小数.
现在我想输入逗号并用点替换它.我可以在KeyDown-或PreviewKeyDown事件中进行替换以及如何进行替换?我不知道如何更换值,而KeyDown和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(",", ".");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我们在窗口的XAML中添加一个资源到转换器类,如下所示:
<Window.Resources>
<local:DecimalConverter x:Key="decimalconverter"/>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
最后,我们将一个Converter-attribute添加到所有datagrid列的绑定中,这些列应包含十进制值.此属性将转换器作为staticresource获取.
<DataGridTextColumn x:Name="col_LowerBound"
Binding="{Binding LowerBound, NotifyOnTargetUpdated=True, Mode=TwoWay, UpdateSourceTrigger=LostFocus, Converter={StaticResource decimalconverter}}"
Header="Lower bound"/>
Run Code Online (Sandbox Code Playgroud)
就这样.在键入其中一个datagrid单元格时,在光标离开单元格后,逗号将被点替换.如果输入错误如"1,1,1",则单元格会出现红色边框并出现错误符号"!" 自动显示在数据网格行的左侧.然后用户可以编辑他的错误.
| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |