日付を編集するときはDatePickerで。

DataGridの列で、日付型を編集する為のクラスってのは特にない。普通はDataGridTextColumnなんだけど、
不正な日付も、日付でなくても入力できてしまう。入力するなら、DatePickerを使いたいところなんだ。
で、それをやろうと思うときに使うのが、DataGridTemplateColumnというクラス。
DataGridTemplateColumnは、セルのテンプレートを自分で指定できる。表示用、編集用の2種類があって、編集が始まると勝手に切り替わってくれる。

<Window x:Class="TawamureDays.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:local="clr-namespace:TawamureDays"
Title="MainWindow" Height="213" Width="385"
local:WindowBehavior.UseMessageCommand="True"
local:FrameworkElementBehavior.OnLoadedCommand="{Binding LoadedCommand}">
<Grid>
<DataGrid AutoGenerateColumns="False"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Standard"
CanUserAddRows="False"
CanUserDeleteRows="False"
SelectionMode="Extended"
SelectionUnit="CellOrRowHeader"
ItemsSource="{Binding PersonsList}"
AlternatingRowBackground="AliceBlue">
<DataGrid.Columns>
<DataGridCheckBoxColumn IsReadOnly="False"
local:DataGridExtender.ColumnId="ColIsChecked"
/>
<DataGridTextColumn IsReadOnly="True"
Header="名前"
local:DataGridExtender.ColumnId="ColFirstName"
Binding="{Binding FirstName}"
Width="1*"
/>
<DataGridTextColumn IsReadOnly="True"
Header="苗字"
local:DataGridExtender.ColumnId="ColSecondName"
Binding="{Binding SecondName}"
Width="2*"
/>
<local:DataGridTextExColumn IsReadOnly="False"
Header="年齢"
local:DataGridExtender.ColumnId="ColAge"
Binding="{Binding Age}"
Width="SizeToHeader"
HorizontalAlignment="Right"
/>
<DataGridTemplateColumn Header="誕生日" Width="*"
local:DataGridExtender.ColumnId="ColBirthday"
SortMemberPath="Birthday">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Birthday,
Mode=OneWay,
StringFormat=yyyy/MM/dd}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding Birthday,
Mode=TwoWay}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>

通常時は、CellTemplate、編集時は、CellEditingTemplateがテンプレートとして適用される。
ちなみに、データありきのDataTemplateのみ使える。
通常
20120731_1

編集モード
20120731_2
幅はひどがっているように見せているけど、編集モードになったからと言って、自動で調整されたりはしない。
なお、SortMemberPathプロパティには、ソートをする際に使用されるプロパティ名を設定する。
これを設定しないと、この列(誕生日)を使ってソートができない。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m