Простой WPF обязательный вопрос.Привязка DataGrid к одной структуре и массиву (списку) структур - PullRequest
0 голосов
/ 11 августа 2011

Я хочу отобразить содержимое двоичного файла в нескольких простых DataGrids (xmlns: kit = "http://schemas.microsoft.com/wpf/2008/toolkit"). Я знаю расположение файла; это довольно просто.

Сначала у меня есть несколько простыхструктуры вида:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class PartitionBasicStationData
{
  public uint longitude;
  public uint latitude;
  public uint StationCode;

}

У меня есть только один экземпляр этого в файле. Хотя это, вероятно, излишне, я хотел бы бросить его в Datagrid. Я надеялся, что я автоматически получу некоторыепростые заголовки столбцов, такие как «долгота», «широта» и т. д. Мой XAML выглядит следующим образом:

<kit:DataGrid Name="m_gridPartion1" MinWidth="120" MinHeight="120"></kit:DataGrid>

и в коде после успешного чтения двоичного файла и создания структуры я делаю это:

m_gridPartion1.ItemsSource = new Partition1[1] { partition1 };
//m_gridPartion1.DataContext = new Partition1[1]{partition1}; // also tried this
// m_gridPartion1.ItemsSource = partion1; // and I tried this

Должно ли это работать?

Для моей второй сетки у меня также будут простые структуры, но многие из них. Структура выглядит как

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class Datum
{
  public uint temperature;
  public uint windVelocity;

}

Я надеялсяЯ мог бы просто сделать что-то вроде этого:

 m_gridData.ItemsSource = myList;  // myList is List<Datum>

Любые учебные пособия или указатели будут высоко оценены. Большая часть материала, с которым я столкнулся, касается привязки из XAML (с чем я не против, если этолегко) или излишне (настройка столбца NAMи т. д.).

Спасибо,

Дейв

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

Определите свой класс как

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class PartitionBasicData
{
    public uint longitude { get; set; }
    public uint latitude { get; set; }
    public uint StationCode { get; set; }
}

и установите для свойства AutoGenerateColumns DataGrid значение True (если вы не хотите определять столбцы вручную)

С этими изменениями, я смог заставить работать следующий код:

m_gridPartition1.ItemsSource = new PartitionBasicData[] { new PartitionBasicData() { latitude = 1, longitude = 2, StationCode = 3 }};


Изменить для вопроса, заданного в комментарии:

Inв этом случае вам потребуется удалить атрибут AutoGenerateColumns и определить столбцы вручную (так как вы будете указывать пользовательский столбец для свойства StationCode)

Для столбца StationCode вам потребуется указатьКонвертер для форматирования вашего массива, или, альтернативно, если byte [] всегда имеет известную длину и формат, вы можете просто указать свойство StringFormat Binding.

Оба метода потребуют от вас либо установитьСвойство CanUserSort для этого столбца имеет значение False или установите для свойства SortMemberPath значение, которое не требует преобразования, чтобы исключение во время выполнения не создавалось, когда пользователь щелкает заголовок столбца.Или, поскольку в этой DataGrid есть только одна строка, указанная в исходном вопросе, можно установить для свойства CanUserSortColumns в DataGrid значение False.

Метод преобразования:

<DataGrid Name="m_gridPartition1">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Longitude" Binding="{Binding Path=longitude}" />
        <DataGridTextColumn Header="Latitude" Binding="{Binding Path=latitude}" />
        <DataGridTextColumn Header="Station Code" Binding="{Binding Path=StationCode, Converter={StaticResource someConverterToStyliseByteArray}}" CanUserSort="False" />
    </DataGrid.Columns>
</DataGrid>

Метод StringFormat:

<DataGridTextColumn Header="Station Code" Binding="{Binding Path=StationCode, StringFormat='{}{0}-{1}-{2}'}" CanUserSort="False" />
0 голосов
/ 11 августа 2011

Представьте поля как общедоступные свойства, и это может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...