I have integrated two interfaces as Observable Collections in the View Model. They are as follows, Product Results:
public interface IProdResult
{
string Name { get; set; } // product name
IMeasureResult Result { get; } // product result
IPos NominalPos { get; } // nominal pose
IPos Deviation { get; } // deviation
string PinType { get; } // product type
IPresentationData Presentation { get; } //Presentation Data
}
Group Results:
public interface IGroupResult
{
IList<IPocketResult> PocketResults { get; }
ResultEnum Result { get; } // ProductResult
string Identifier { get; } // Identifier
DateTime TimeStamp { get; } // Timestamp
IPresentationData Presentation { get; } //Presentation data
}
My View Model is as follows
public class AnalysisDataGridViewModel : SubPageViewModel
{
#region Fields
private ObservableCollection<IProdResult> _product
= new ObservableCollection<IProdResult>();
private ObservableCollection<IGroupResult> _group
= new ObservableCollection<IGroupResult>();
public MainViewModel()
{
Coordinates = new Dictionary<Coordinate, NotifingBoolean>();
var services = App.Container.Resolve<IProductionServices>();
services.ProductSelectionOnservable
.SelectMany(group=> group.GroupResults)
.SelectMany(products => products.ProductResults)
.Subscribe(product=> ProdView.Add(product));
services.ProductSelectionOnservable
.SelectMany(group => group.GroupResults)
.Subscribe(group=> GroupView.Add(group));
}
public ObservableCollection<IProdResult> ProdView=> _product;
public ObservableCollection<IGroupResult> GroupView=> _group;
}
Now I need to take the Identifier from IGroupResult and combine it with the IProdResult so that I can display them in a datagrid column as Identifier. Every Group has a list of products with the same group identifier and they need to be displayed for every product row in the data grid.
My datagrid is as follows
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Grid VerticalAlignment="Top" HorizontalAlignment="Left">
<DataGrid Grid.Row="1"
AutoGenerateColumns="False"
HeadersVisibility="All"
SelectionMode="Extended"
SelectionUnit="FullRow"
CanUserReorderColumns="True"
ItemsSource="{Binding ProdView}">
<DataGrid.Columns>
<DataGridTextColumn Header="{DynamicResource Name}"
Width="Auto"
Binding="{Binding Name}" />
<DataGridTextColumn Header="{DynamicResource NominalPoseX}"
Width="Auto"
Binding="{Binding NominalPos.X}" />
<DataGridTextColumn Header="{DynamicResource NominalPoseY}"
Width="Auto"
Binding="{Binding NominalPos.Y}" />
<DataGridTextColumn Header="{DynamicResource NominalPoseZ}"
Width="Auto"
Binding="{Binding NominalPos.Z}" />
<DataGridTextColumn Header="{DynamicResource DeviationX}"
Width="Auto"
Binding="{Binding Deviation.X}" />
<DataGridTextColumn Header="{DynamicResource DeviationY}"
Width="Auto"
Binding="{Binding Deviation.Y}" />
<DataGridTextColumn Header="{DynamicResource DeviationZ}"
Width="Auto"
Binding="{Binding Deviation.Z}" />
<DataGridTextColumn Header="{DynamicResource ResultX}"
Width="Auto"
Binding="{Binding Result.X}" />
<DataGridTextColumn Header="{DynamicResource ResultY}"
Width="Auto"
Binding="{Binding Result.Y}" />
<DataGridTextColumn Header="{DynamicResource ResultZ}"
Width="Auto"
Binding="{Binding Result.Z}" />
</DataGrid.Columns>
I looked into the following answers in Link1 and using either Composite Collection or CollectionViewSource but could not find a proper solution. Any help will be greately useful.