public void Update(MetaDataTagItem.Data data, TableDefinitionModel tableDef)
        {
            if (data == null)
            {
                SelectedItemSize      = 0;
                ByteStream            = null;
                SelectedItemBytesLeft = 0;
                HasUniformByteSize    = false;
                BackgroundBlocks.Clear();

                for (int i = 0; i < Fields.Count; i++)
                {
                    UpdateViewModel(Fields[i], new byte[0], 0);
                }

                return;
            }

            HasUniformByteSize = _activeMetaDataContent.SelectedTagType.DataItems.Select(x => x.Size).Distinct().Count() == 1;
            SelectedItemSize   = data.Size;

            ByteStream = new MemoryStream(data.Bytes, data.Start, data.Size);
            BackgroundBlocks.Clear();

            int counter  = 0;
            var endIndex = tableDef.Definition.ColumnDefinitions.Count();
            int index    = data.Start;

            for (int i = 0; i < endIndex; i++)
            {
                if (i < endIndex)
                {
                    var byteParserType = tableDef.Definition.ColumnDefinitions[i].Type;
                    var parser         = ByteParserFactory.Create(byteParserType);
                    parser.TryDecode(data.Bytes, index, out _, out var bytesRead, out _);
                    index += bytesRead;

                    var block = new CustomBackgroundBlock()
                    {
                        Description = tableDef.Definition.ColumnDefinitions[i].Name,
                        Color       = counter % 2 == 0 ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Yellow),
                        Length      = bytesRead,
                        StartOffset = index - bytesRead - data.Start,
                    };
                    BackgroundBlocks.Add(block);

                    counter++;
                }
            }

            SelectedItemBytesLeft = SelectedItemSize - (index - data.Start);

            for (int i = 0; i < Fields.Count; i++)
            {
                UpdateViewModel(Fields[i], data.Bytes, index);
            }
        }
        void Create(DbTypesEnum enumValue)
        {
            var type = ByteParserFactory.Create(enumValue);
            SingleFieldExplporer newItem = new SingleFieldExplporer();

            newItem.EnumValue                  = enumValue;
            newItem.CustomDisplayText          = type.TypeName;
            newItem.ButtonText                 = "Add";
            newItem.CustomButtonPressedCommand = new RelayCommand <SingleFieldExplporer>(OnButtonPressed);
            Fields.Add(newItem);
        }
        void UpdateViewModel(SingleFieldExplporer viewModelRef, byte[] data, int index)
        {
            var parser = ByteParserFactory.Create(viewModelRef.EnumValue);
            var result = parser.TryDecode(data, index, out string value, out var _, out string error);

            if (result == false)
            {
                viewModelRef.ValueText        = "Error:" + error;
                viewModelRef.BackgroundColour = new SolidColorBrush(Colors.Pink);
            }
            else
            {
                viewModelRef.ValueText        = value;
                viewModelRef.BackgroundColour = new SolidColorBrush(Colors.White);
            }
        }