WPF DataGrid Получить содержимое ячейки из DataGridTemplateColumn - PullRequest
1 голос
/ 03 июля 2019

У меня есть привязка dataTable к dataGrid:

CS:

SQLiteDataAdapter sQLiteDataAdapter = new SQLiteDataAdapter(_command);
DataTable dataTable = new DataTable("Inventory");
sQLiteDataAdapter.Fill(dataTable);
for (int i = 0; i < dataTable.Rows.Count; i++)
{
    dgridTenderInventory.Items.Add(new
      {
         ID = dataTable.Rows[i]["id"],                            
         Specs = dataTable.Rows[i]["specs"],
         Image = dataTable.Rows[i]["image"]                            
       });
}

XAML:

 <DataGrid x:Name="dgridTenderInventory" RowHeaderWidth="0"  MouseDown="DgridTenderInventory_MouseDown">
    <DataGrid.Columns>
       <DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
       <DataGridTemplateColumn Header="Image">
           <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Height="50" Source="{Binding Image, Converter={StaticResource BinaryImageConverter}}"/>
                </DataTemplate>
           </DataGridTemplateColumn.CellTemplate>
       </DataGridTemplateColumn>
       <DataGridTemplateColumn Header="Specs">
           <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Specs}" TextWrapping="Wrap"/>
                </DataTemplate>
           </DataGridTemplateColumn.CellTemplate>
       </DataGridTemplateColumn>
     </DataGrid.Columns>
  </DataGrid>

Я могу получить значение ячейки для идентификатора (DataGridTextColumn), выбрав строку следующим образом:

object item = dgridTenderInventory.SelectedItem;
string ID = dgridTenderInventory.SelectedCells[0].Column.GetCellContent(item) as TextBlock).Text;

Но когда я хочу получить Specs (как текст) или Image (как изображение), он говорит: «... возвращен ноль». Вероятно, это результат DataGridTemplateColumn. Как я могу получить значение внутри DataGridTemplateColumn? (Особенно мне нужно получить изображение и установить изображение (называемое imgPopup) точно так же, как ячейка изображения dataGrid)

string specs= dgridTenderInventory.SelectedCells[2].Column.GetCellContent(item) as TextBlock).Text; // return null
imgPopup.Source = dgridTenderInventory.SelectedCells[1].Column.GetCellContent(item) as Image).Source ; // ?? how does it be implemented?

Ответы [ 2 ]

1 голос
/ 03 июля 2019

DataGridTemplateColumn просто определяет ваши шаблоны шаблонов для столбцов в вашей DataGrid, вы никогда не должны определять привязку для этого элемента, привязка должна выполняться на уровне данных.

0 голосов
/ 04 июля 2019

Я нашел решение . Я отредактировал код, и он работает:

string specs = (VisualTreeHelper.GetChild(dgridTenderInventory.Columns[2].GetCellContent(item), 0) as TextBlock).Text;
imgPopup.Source = (VisualTreeHelper.GetChild(dgridTenderInventory.Columns[1].GetCellContent(item), 0) as Image).Source;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...