WPF DataGrid:LostKeyboardFocus与IsEditing和AddRows

时间:2016-01-29 13:24:26

标签: c# wpf xaml datagrid lost-focus

我有一个DataGridTextColumn的WPF UpdateSourceTrigger=Default。 它允许用户输入可变数量的日期(日期本身包含在类中,用于绑定目的)。

但是(使用DataGrid)当用户使用Tab键导航离开UpdateSourceTrigger时,他正在编辑的单元格似乎没有离开编辑模式 /得到验证。 输入的值显示为红色,行标题显示由虚线框起的感叹号。

LostFocus设置为DataGrid会修复 - 但是当我的代码将基础集合(以便于连续用户输入)重置为单项集合时,CanUserAddRows="True"仅显示单个行。尽管Mode新的空行仍然缺失(如果我的代码只是通过清除它来重置集合,则只会显示列标题。)

我尝试通过将OneWayToSource设置为DataGrid来解决此问题 - 但UpdateSourceTrigger不再显示输入的值。

如果我将PropertyChanged设置为<DataGrid AutoGenerateColumns="False"CanUserAddRows="True" ItemsSource="{Binding CourseDatesParameterForRequest}"> <DataGrid.Columns> <DataGridTextColumn Header="Datum" Binding="{Binding Date, ConverterCulture=nl-BE, Mode=TwoWay, StringFormat=\{0:dd/MM/yyyy\}, UpdateSourceTrigger=Default, ValidatesOnDataErrors=True}"> </DataGridTextColumn> </DataGrid.Columns> </DataGrid> 验证即将发生,从而导致糟糕的用户体验(日期应格式为DD / MM / YYYY。但是,一旦用户输入&#34; 1/1&#34;,&#34; 01/01 / 2016&#34;显示。使用退格编辑年份,使值更改为&#34; 01 / 01/0201&#34;等等)

似乎有一个解决方案documented需要代码隐藏,但我更喜欢更清洁的解决方案。

我的代码:

private ObservableCollection<DateWrapper> _courseDatesParameterForRequest;
public ObservableCollection<DateWrapper> CourseDatesParameterForRequest
{
    get { return _courseDatesParameterForRequest; }
    set
    {
        if (value != _courseDatesParameterForRequest)
        {
            _courseDatesParameterForRequest = value;

            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(nameof(CourseDatesParameterForRequest)));
            }
        }
    }
}
   public class DateWrapper
    {
        public int ID { get; set; }
        public DateTime Date { get; set; }
        public DateWrapper(DateTime date)
        {
            Date = date;
        }
        public DateWrapper(){}
    }
async_result = some_task.delay(arg1)
result = async_result.get()

提前致谢!

0 个答案:

没有答案