在用户键入时格式化DataGrid列

时间:2016-04-13 14:30:15

标签: c# wpf user-interface datagrid

我有一个if len(name) >= 3: # (assume that user only has one middle name) firstname = splits[0] middlename = splits[1] lastnames = splits[2:] ( catch all last names into a list ) ,其中列是一个简单的DataGrid。我想要做的是当用户在DataGridTextColumn中输入行时,只允许他们输入特定格式,在本例中为DataGrid。我将为他们输入dd/MM/yyyy,然后他们必须输入符合此格式的日期。

这是我的/ /;

DataGridColumn

有没有办法在用户输入时格式化<DataGridTextColumn Header="Date" Width="*"/>

1 个答案:

答案 0 :(得分:1)

WPF中没有内置MaskedTextBox。但是,您可以使用扩展WPF工具包中的MaskedTextBoxDateTimePicker

我想在Extended WPF Toolkit和MaskedTextBox中展示DateTimePickerenter image description here

<强>更新

当然,您可以将DateTimePicker添加到DataGrid

首先,下载Extended WPF ToolKit through Nuget.

然后,在xmlns中创建假名以使用WPF Extended Toolkit库:

<Window
...
xmlns:wpfTool="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
   <vm:MainWindowViewModel/>
</Window.DataContext>
<Grid>        
    <DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding IdPerson}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>                                
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                   <DataTemplate>                           
                            <wpfTool:DateTimePicker Value="{Binding MyDate}"/>
                        </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>                    
            </DataGridTemplateColumn>                
        </DataGrid.Columns>
    </DataGrid>
</Window>

和模型类:

public class Person
{
    public int IdPerson { get; set; }
    public string Name { get; set; }
    public DateTime FirstDate { get; set; }
}

只需使用MaskedTextBoxMask="00-00-0000" WPF Extended Toolkit。例如:

<DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Header="ID" Binding="{Binding IdPerson}"/>
    <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>                                
    <DataGridTemplateColumn>
       <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>                                 
             <wpfTool:MaskedTextBox Mask="00-00-0000" Text="{Binding CheckDateTime}"/>                           
          </DataTemplate>
       </DataGridTemplateColumn.CellTemplate>                    
     </DataGridTemplateColumn>                
  </DataGrid.Columns>
</DataGrid>

然后按CheckDateTime

解析DateTime.ParseExact(...);