示例#1
0
 public DataTableRow(string tagName, int index, List <DbColumnDefinition> fieldInfos, MetaDataTagItem.Data dataItem)
 {
     _fieldInfos = fieldInfos;
     DataItem    = dataItem;
     TagName     = tagName;
     Index       = index;
     Rebuild();
 }
        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);
            }
        }
示例#3
0
 private void ActiveMetaDataContent_SelectedTagItemChanged(MetaDataTagItem.Data newValue)
 {
     if (newValue == null)
     {
         TagVersion = 0;
         TagName    = "";
     }
     else
     {
         TagVersion = newValue.Version;
         TagName    = _activeMetaDataContent.SelectedTagType.Name;
     }
 }
 private void OnSelectedTagItemChanged(MetaDataTagItem.Data newValue)
 {
     Update(newValue, _tableDefinition);
 }