/// <summary> /// Appends the marble. /// </summary> /// <param name="itemWrapper">The item wrapper.</param> public void AppendMarble(MarbleItemViewModel itemWrapper) { #region Validation if (itemWrapper == null) { throw new NullReferenceException("itemWrapper"); } #endregion Validation MarbleBase item = itemWrapper.Item; if (TabKind == TabKind.Flat) { FlatItems.AddAsync(item); return; } itemWrapper.MainContext = this; #region Diagrams.AddAsync(diagram) MarbleDiagramModel diagram; if (!_marbleDiagrams.TryGetValue(item.Name, out diagram)) { diagram = new MarbleDiagramModel(item.Name, item.IndexOrder, this); if (_marbleDiagrams.TryAdd(item.Name, diagram)) { Diagrams.AddAsync(diagram); } else { diagram.Dispose(); diagram = _marbleDiagrams[item.Name]; } } #endregion // Diagrams.AddAsync(diagram) itemWrapper = itemWrapper.Clone(diagram); diagram.AppendMarble(itemWrapper); }