У меня очень упрощенная (частично) привязанная к данным ViewModel, которая предоставляет свойство Nullable, которое позже отображается в DataGrid
:
public class MyViewModel : ViewModelBase
{
private DateTime? _date;
public DateTime? Date {
get => _date;
set => Set(ref _date, value);
}
}
<DataGrid ItemsSource="{Binding MyViewModels}">
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
</DataGrid.Columns>
</DataGrid>
Все работает как положено, отображаются даты, у которых есть значение, ячейки для значений null
полностью пустые.
Однако как я могу предварительно заполнить привязанные значения null
с помощью DateTime.Now
при входе в режим редактирования ячейки ? Бонусный пункт: DateTime.Now
возвращается к null
в случае, если редактирование ячейки было прервано.
Попытка 2 (на основе комментариев) с использованием DataGridTemplateColumn
и swich TextBlock
без TargetNullValue
для TextBox
с одним, к сожалению, это недопустимая привязка:
TargetNullValue «25.06.2009 0:00:00» (тип «DateTime») не может быть
преобразован для использования в «Текст»
<DataGridTemplateColumn SortMemberPath="Date" Header="Date">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Date}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Date, TargetNullValue={x:Static sys:DateTime.Today}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>