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 rowprivate 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?
