У меня есть байтовый массив, который может быть очень большим по размеру.Я хочу привязать его к сетке с фиксированным размером столбца, скажем, 10.
, поэтому первые 10 байтов будут в первой строке, 10 следующих байтов будут во второй строке ...до конца массива.
Мне нужно иметь возможность редактировать любые байты, и это должно быть отражено в массиве.Мой байтовый массив должен оставаться простым байтовым массивом.
Все это с использованием WPF C #.
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ:
На самом деле, решение AS-CII не сохраняет обновленные значения в исходный массив.Я изменил пример, чтобы он соответствовал этому критерию:
<DataGrid AutoGenerateColumns="False" Name="dataGrid1" ItemsSource="{Binding Bytes}" ColumnWidth="1*">
<DataGrid.Columns>
<DataGridTextColumn Header="1" Binding="{Binding [0]}"></DataGridTextColumn>
<DataGridTextColumn Header="2" Binding="{Binding [1]}"></DataGridTextColumn>
<DataGridTextColumn Header="3" Binding="{Binding [2]}"></DataGridTextColumn>
<DataGridTextColumn Header="4" Binding="{Binding [3]}"></DataGridTextColumn>
<DataGridTextColumn Header="5" Binding="{Binding [4]}"></DataGridTextColumn>
<DataGridTextColumn Header="6" Binding="{Binding [5]}"></DataGridTextColumn>
<DataGridTextColumn Header="7" Binding="{Binding [6]}"></DataGridTextColumn>
<DataGridTextColumn Header="8" Binding="{Binding [7]}"></DataGridTextColumn>
<DataGridTextColumn Header="9" Binding="{Binding [8]}"></DataGridTextColumn>
<DataGridTextColumn Header="10" Binding="{Binding [9]}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Обратите внимание, что единственным изменением было Array [0] на [0]
public struct ArrayPiece<T>
{
private T[] m_Data;
private int m_Offset;
private int m_Length;
public T this[int index] {
get{
return m_Length > index? m_Data[m_Offset + index] : default(T);
}
set{
if(m_Length > index)
m_Data[m_Offset + index] = value;
}
}
public ArrayPiece(T[] array, int offset, int length)
: this()
{
m_Data = array;
m_Offset = offset;
m_Length = length;
}
}
И это новый ArrayPiece.
С этими изменениями, когда в пользовательском интерфейсе значение изменяется, оно обновляется до исходного массива.
Существует одна проблема с этим: если последний ArrayPiece имеет только 8 элементов вместо 102 левых элемента будут отображать 0 в DataGrid в отличие от использования массива напрямую.Я попытался реализовать свойства Length и LongLength безуспешно.Если я выбрасываю указатель из границы, он не перехватывается.
Спасибо!