DataGrid の RowDetails の表示を行ごとに変えたい
-
2012年3月31日 11:04
以下で、RowDetails を表示できることは確認しました。
<sdk:DataGrid RowDetailsVisibilityMode="Visible" ...> <sdk:DataGrid.RowDetailsTemplate> <DataTemplate> <TextBlock Text="{Binding Path=Name}" /> </DataTemplate> </sdk:DataGrid.RowDetailsTemplate> <sdk:DataGrid.Columns> .... </sdk:DataGrid.Columns> </sdk:DataGrid>
続いて、
奇数行、偶数行で Template を変えようと思います。
どうすれば可能でしょう?- 編集済み custar 2012年3月31日 11:09
すべての返信
-
2012年3月31日 13:20
- Does each row in a silverlight dataGrid have to have the same “RowDetailsTemplate”?
<UserControl.Resources> <DataTemplate x:Key="evenTemplate"> <TextBlock Text="{Binding Path=Name}" /> </DataTemplate> <DataTemplate x:Key="oddTemplate"> <TextBox Text="{Binding Path=Name}" /> </DataTemplate> </UserControl.Resources>
private void bDataGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e) { int idx = e.Row.GetIndex(); if (idx % 2 != 0) { e.Row.DetailsTemplate = (DataTemplate)Resources["oddTemplate"]; } }
- 編集済み custar 2012年3月31日 13:22
-
2012年3月31日 14:11
Children がない場合は RowDetails を出さないようにしてみました。
図1:D.Id = 2 に Children Fs がある場合
図2:D.Id = 2 に Children Fs がない場合
private void dDataGrid_LoadingRowDetails(object sender, DataGridRowDetailsEventArgs e) { var d = e.DetailsElement.DataContext as D; if (d.Fs.Count > 0) { e.Row.DetailsTemplate = (DataTemplate)Resources["detailsTemplate"]; } }
<UserControl.Resources> <DataTemplate x:Key="detailsTemplate"> ....................................... (1) <sdk:DataGrid ItemsSource="{Binding Path=Fs}" ...> <sdk:DataGrid.Columns> <sdk:DataGridTextColumn Binding="{Binding Path=DId}" Header="D Id" /> <sdk:DataGridTextColumn Binding="{Binding Path=Name}" Header="F Name" /> </sdk:DataGrid.Columns> </sdk:DataGrid> </DataTemplate> </UserControl.Resources> <Grid ...> <sdk:DataGrid ItemsSource="{Binding ElementName=dDomainDataSource, Path=Data}" ...> <sdk:DataGrid.RowDetailsTemplate> <DataTemplate> ........................................................... (2) <StackPanel></StackPanel> </DataTemplate> </sdk:DataGrid.RowDetailsTemplate> <sdk:DataGrid.Columns> <sdk:DataGridTextColumn Binding="{Binding Path=Id, Mode=OneWay}" Header="D Id" .../> <sdk:DataGridTextColumn Binding="{Binding Path=Value}" Header="D Value" .../> </sdk:DataGrid.Columns> </sdk:DataGrid> ... </Grid>
本当は、
予め (2) に (1) を設定しておき、Children がない時だけ
e.Row.DetailsTemplate = null
としたかったが、そうすると、
RowDetails に Children DataGrid の Header が残ってしまった。
残らなければ、それがいいのだが。- 編集済み custar 2012年3月31日 14:18
-
2012年3月31日 15:58Children の有無で RowDetails を出す出さないって、
xaml で出来そうな感じがするのですが、よくは分からない。
以前教えてもらった DataTrigger や IValueConverter を使って。- 編集済み custar 2012年3月31日 16:00

