0

Хотел отобразить все картинки в DataGrid которые хранятся в DataTabe как URI пути , в DataGrid использовал свой шаблон ячейки (DataGridTemplateColumn) . Думал что привязка будет к каждой колонке но удалось связать только по имени колонки.

Проблема в том что я не могу создать в DataTable колонки с одинаковыми именами.

      <DataGrid Name="ChannelDataGrid" Margin="5" Grid.Column="1" ItemsSource="{Binding Data}" AutoGeneratingColumn="ChannelDataGrid_OnAutoGeneratingColumn" SelectionMode="Single" SelectionUnit="Cell" AlternationCount="9999" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserSortColumns="False">
        <DataGrid.Resources>
            <DataTemplate x:Key="ImgCell">
                <Image Source="{Binding Path=Img}"/>
            </DataTemplate>
        </DataGrid.Resources>

        <DataGrid.RowHeaderTemplate>
            <ItemContainerTemplate>
                <!-- AlternationIndex - это хак, использование не по назначению,
                но здесь это самый простой способ пронумеровать строки без кучи кода -->
                <TextBlock Text="{Binding AlternationIndex,RelativeSource={RelativeSource AncestorType=DataGridRow}}"/>
            </ItemContainerTemplate>
        </DataGrid.RowHeaderTemplate>
    </DataGrid>

Как сделать binding к всем колонкам ?

Обновление 1:

Картинки есть но вся строка рисует картинки которые в первой ячейке, тоесть, можно менять картинки во всей строке а не ячейке.

            Data = new DataTable("BestTable");
        _data.Columns.Add("Img1");

И в XAML указал на неё.

        <DataGrid Name="ChannelDataGrid" Margin="5" Grid.Column="1" ItemsSource="{Binding Data}" AutoGeneratingColumn="ChannelDataGrid_OnAutoGeneratingColumn" SelectionMode="Single" SelectionUnit="Cell" AlternationCount="9999" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserSortColumns="False">
        <DataGrid.Resources>
            <DataTemplate x:Key="ImgCell">
                <Image Source="{Binding Path=Img1}"/>
            </DataTemplate>
        </DataGrid.Resources>

        <DataGrid.RowHeaderTemplate>
            <ItemContainerTemplate>
                <!-- AlternationIndex - это хак, использование не по назначению,
                но здесь это самый простой способ пронумеровать строки без кучи кода -->
                <TextBlock Text="{Binding AlternationIndex,RelativeSource={RelativeSource AncestorType=DataGridRow}}"/>
            </ItemContainerTemplate>
        </DataGrid.RowHeaderTemplate>
    </DataGrid>

Все последующие динамически созданные колонки и строки автоматически связывают их, но я не уверен что так правильно делать.

Код взять с этого ответа. Приложения на github https://github.com/Devoleksiy/MyApp3

  • 1
    Вы создаете шаблон DataTemplate с ключом x:Key="ImgCell", то есть, добавляете его в справочник ресурсов, но нигде его не используете. Вам либо надо DataType прописать, либо разметить колонки явно. – aepot May 06 '20 at 19:01
  • 1
    у вас .NET Core или Framework? – aepot May 06 '20 at 19:12
  • Я вставил данный кусок кода из другого кода, но еще не разобрался как его упростить. Framework. Разметить не могу, колонки и ряды добавляются во время выполнения (Сетка для рисования картинками) . Подобный этому https://github.com/grebtsew/Patterns-Maker , но на wpf а не на windows form . – Oleksiy Morgun May 06 '20 at 20:12

0 Answers0