Самый простой способ создать класс-оболочку вокруг некоторых строк для WPF DataGrid? - PullRequest
0 голосов
/ 18 мая 2010

Я создаю простой шестнадцатеричный редактор в C #, и я решил использовать каждую ячейку в DataGrid для отображения байта *. Я знаю, что DataGrid возьмет список и отобразит каждый объект в списке в виде строки, а каждое из свойств этого объекта в виде столбцов. Я хочу отобразить строки по 16 байт в каждой, что потребует оболочки с 16 строковыми свойствами. Хотя это выполнимо, это не самое элегантное решение. Есть ли более простой способ? Я уже пытался создать обертку вокруг массива открытых строк размером 16, но, похоже, это не сработало.

Спасибо

* Обоснование этого заключается в том, что я могу иметь пробелы между каждым байтом без необходимости удалять их все, когда я хочу сохранить отредактированный файл. Также кажется, что будет легче маркировать строки и столбцы.

Ответы [ 2 ]

1 голос
/ 18 мая 2010

Я предлагаю вам использовать MultiBinding.

     <my:DataGrid ItemsSource="{Binding HexDataArray}">
        <my:DataGrid.Columns>
            <my:DataGridTemplateColumn>
                <my:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock>
                          <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0} {1} ...">
                              <Binding Path="Array[0]" />
                              <Binding Path="Array[1]" />
                                .........................
                            </MultiBinding>
                          </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>
        </my:DataGrid.Columns>
    </my:DataGrid>
1 голос
/ 18 мая 2010

Я бы подумал о создании обычной сетки с 16 столбцами в ColumnDefinitions и динамических RowDefinitions коллекциях и размещении TextBox без полей в каждой ячейке. Вам нужно было бы перегрузить некоторую обработку клавиш, чтобы пользователю было легче перемещаться между текстовыми полями, но подобное было бы необходимо для ячеек DataGrid.

Если вы все еще хотите использовать DataGrid, указание ItemsSource на список массивов размером 16 должно сработать. Создайте 16 DataGridTextColumns из кода. Каждый с Binding = new Binding(string.Format("[{0}]", i)), где i равен 0..15. Свойство индексации - это просто другое свойство, и вы можете легко связать его с ним. Это не обязательно должны быть строковые массивы: используйте байты и создайте IValueConverter между шестнадцатеричной строкой и байтом. Ох, и выключи AutoGenerateColumns.

...