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); } }