The question is pretty old, but i recently faced this issue myself. An Alternative to @Gregfr answer above is to write your custom DataGridColumn class. The following is what i have done for DatePicker Column:
public class DataGridDatePickerColumn : DataGridBoundColumn { protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) { var datePicker = new DatePicker(); datePicker.SetBinding(DatePicker.TextProperty, this.Binding); datePicker.SetBinding(DatePicker.SelectedDateProperty, this.Binding); return datePicker; } protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) { var textBlock = new TextBlock(); textBlock.SetBinding(TextBlock.TextProperty, this.Binding); return textBlock; } }
Then i use it in one-line call in my xaml-pages like this:
<h:DataGridDatePickerColumn IsReadOnly="False" Header="Some Date" Binding="{Binding SomeDate, StringFormat='dd.MM.yyyy'}" />
In your case you could extend this C# Class by writing supporting functions that work with PreviewTextInput property and use regex expressions like [0-9]+ to control editing.