Is there something extra to be done in WPF to show a DataGrid of only DateTime objects?
XAML:
<code> <DataGrid
ItemsSource="{Binding Path=Model.Dates}"
AutoGenerateColumns="False"
CanUserAddRows="True"
CanUserDeleteRows="True"
CanUserSortColumns="True"
CanUserReorderColumns="True"
AlternatingRowBackground="WhiteSmoke"
SelectionUnit="Cell">
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Path=., Converter={StaticResource dateConverter}}" />
</DataGrid.Columns>
</code>
<code> <DataGrid
ItemsSource="{Binding Path=Model.Dates}"
AutoGenerateColumns="False"
CanUserAddRows="True"
CanUserDeleteRows="True"
CanUserSortColumns="True"
CanUserReorderColumns="True"
AlternatingRowBackground="WhiteSmoke"
SelectionUnit="Cell">
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Path=., Converter={StaticResource dateConverter}}" />
</DataGrid.Columns>
</code>
<DataGrid
ItemsSource="{Binding Path=Model.Dates}"
AutoGenerateColumns="False"
CanUserAddRows="True"
CanUserDeleteRows="True"
CanUserSortColumns="True"
CanUserReorderColumns="True"
AlternatingRowBackground="WhiteSmoke"
SelectionUnit="Cell">
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Path=., Converter={StaticResource dateConverter}}" />
</DataGrid.Columns>
Model:
<code> private ObservableCollection<DateTime> _dates= new
ObservableCollection<DateTime>() { DateTime.Today };
public ObservableCollection<DateTime> Dates
{
get { return _dates; }
set
{
_dates= value;
OnPropertyChanged("Dates");
}
}
</code>
<code> private ObservableCollection<DateTime> _dates= new
ObservableCollection<DateTime>() { DateTime.Today };
public ObservableCollection<DateTime> Dates
{
get { return _dates; }
set
{
_dates= value;
OnPropertyChanged("Dates");
}
}
</code>
private ObservableCollection<DateTime> _dates= new
ObservableCollection<DateTime>() { DateTime.Today };
public ObservableCollection<DateTime> Dates
{
get { return _dates; }
set
{
_dates= value;
OnPropertyChanged("Dates");
}
}
DateConverter is a simple converter which formats the dates into a custom format.
Yet, this simple set-up doesn’t allow me to add new rows and returns an error on editing (Two-way path not setup).
Wrapping the dates in a custom object:
<code> public class TestData
{
public DateTime Date{ get; set; }
}
</code>
<code> public class TestData
{
public DateTime Date{ get; set; }
}
</code>
public class TestData
{
public DateTime Date{ get; set; }
}
And setting the Dates in the model as:
<code> private ObservableCollection<TestData> _dates = new ObservableCollection<TestData>();
</code>
<code> private ObservableCollection<TestData> _dates = new ObservableCollection<TestData>();
</code>
private ObservableCollection<TestData> _dates = new ObservableCollection<TestData>();
Change in XAML of the Column:
<code><DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Path=Date, Converter={StaticResource dateConverter}}" />
</DataGrid.Columns>
</code>
<code><DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Path=Date, Converter={StaticResource dateConverter}}" />
</DataGrid.Columns>
</code>
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Path=Date, Converter={StaticResource dateConverter}}" />
</DataGrid.Columns>
Does give a correctly working DataGrid which allows to add new rows and edit existing cells.