I have a RowSourceNeeded event, and inside that event I create my child GridView and add rows to it. There are conditions that would keep me from adding the child GridView; however, I still need to add this child when I do have the data required to do so.
In this event I check a property "model.Parameters" which could be null; however, it is not always going to be null (after handling the RowSourceNeeded event) and when not null I need to add the child GridView.
Here's where I add it.
// get the analysis parameter differences for this row (scan)
private async void BatchComparisonGrid_RowSourceNeeded(object sender, GridViewRowSourceNeededEventArgs e)
{
// tell user we're getting the analysis parameters
UpdateWaitingBar(ElementVisibility.Visible, "Getting analysis parameters");
// get item bound to the row
ComparisonScanViewModel model = e.ParentRow.DataBoundItem as ComparisonScanViewModel;
await Task.Factory.StartNew(() =>
{
if (null != model && null != model.Parameters)
{
// I don't do anything here, I just needed to cause 'model.Parameters' to
// be called since it is a timely call.
}
});
// update the UI
if (null != model &&
null != model.Parameters)
{
foreach (ComparisonAnalysisParameterViewModel am in model.Parameters)
{
// build values to go in the row details grid
GridViewRowInfo row = e.Template.Rows.NewRow();
row.Cells["Description"].Value = am.Title;
row.Cells["Value"].Value = am.Value;
e.SourceCollection.Add(row);
}
e.ParentRow.IsExpanded = true;
}
// tell the user we're done
UpdateWaitingBar(ElementVisibility.Collapsed);
}
Later, I'm listening to the CurrentRowChanging event. Here I can get the same data from the model and potentially build the child GridView; however, I don't have the necessary information required that was provided to me in the RowSourceNeeded event. I.e. e.Template and e.SourceCollection.
// row is changing in the grid and time to expand that item to show the details for the row
private void BatchComparisonGrid_CurrentRowChanging(object sender, CurrentRowChangingEventArgs e)
{
if (e.NewRow is GridViewHierarchyRowInfo)
{
foreach (var item in BatchComparisonGrid.Rows)
{
item.IsExpanded = false;
}
// get model
ComparisonScanViewModel model = e.NewRow.DataBoundItem as ComparisonScanViewModel;
if(null != model.Parameters)
{
// code would go here that checks to see if this row already had the child GridView
// added, and if not AND model.Parameters is not null, then we'll add the child GridView now.
// BUT, how to do this from here ????
}
// expand
e.NewRow.IsExpanded = true;
}
}
Is there some way to access what I need from the CurrentRowChanging event in order to add the child GridView...since the RowSourceNeeded event is never raised again after the first time it is raised?