RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected の標準の Silverlight DataGrid があります。
XAML と親コントロールの Loaded イベントの両方でこのプロパティを設定しようとしました。親の Loaded イベントで、グリッドの itemsource を設定してから、選択したインデックスを手動で 0 に設定しています。これは RowDetailsVisibilityChanged イベントを発生させません。
ただし、新しい行をクリックして選択を変更すると、起動します。その最初の選択の行の「DetailElement」にアクセスして、その中のコントロールにデータを入力する必要があります。ただし、その DetailElement を取得する方法を知っている唯一の方法は、RowDetailsVisibilityChanged イベントにあります。
これが私のコードです:
void ViewAssociationUserControl_Loaded(object sender, RoutedEventArgs e)
{
viewAssociationsDataGrid.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected;
viewAssociationsDataGrid.ItemSource = myData;
viewAssociationsDataGrid.SelectedIndex = 0;
}
private void viewAssociationsDataGrid_RowDetailsVisibilityChanged(object sender, System.Windows.Controls.DataGridRowDetailsEventArgs e)
{
if (viewAssociationsDataGrid.RowDetailsVisibilityMode == DataGridRowDetailsVisibilityMode.VisibleWhenSelected
&& e.Row.DetailsVisibility == System.Windows.Visibility.Visible)
{
Grid detailElement = e.DetailsElement as Grid;
if (detailElement != null)
{
ListBox assocControl = detailElement.FindName("oneToManyGridPanel") as ListBox;
UpdateOneToManyPanel(assocControl);
}
}
}