Как связать Image Source = "?" со значением из DataTable (путь изображения)? МОФ - PullRequest
0 голосов
/ 01 мая 2020

Я хочу изменить значение Source = "img / Best / 1.png" для ячейки DataGrid, на которую я нажал, одним нажатием кнопки, любой опции. Как связать значение в ячейке DataGrid, загруженной из DataTable? Я пробовал разные варианты и ничего не получалось. Сложный wpf для начинающих.

Вот концептуальное фото:

Here is a concept photo

Я отправил это в русское переполнение стека Вот пример реализации моего идея на windows формах. https://github.com/grebtsew/Patterns-Maker

<Window.Resources>
    <viewModel:DataRowViewConverter x:Key="drvc" />
    <DataTemplate x:Key="ATemplate">
        <Image x:Name="MyImage" Source="img/Best/1.png"></Image>
    </DataTemplate>
</Window.Resources>


<DataGrid x:Name="MyGrid" AutoGenerateColumns="True" ItemsSource="{Binding Items}" AutoGeneratingColumn="DataGrid_AutoGeneratingColumn" CanUserAddRows="True" SelectedCellsChanged="MyGrid_SelectedCellsChanged" SelectionUnit="Cell" Grid.ColumnSpan="2">
</DataGrid>
DataGrid MyGrid = new DataGrid();
System.Data.DataTable MyDataTable = new System.Data.DataTable();
MyDataTable.Columns.Add("Col1", typeof(string));
MyDataTable.Columns.Add("Col2", typeof(string));
MyDataTable.Columns.Add("Col3", typeof(string));
MyDataTable.Columns.Add("Col4", typeof(string));
MyDataTable.Columns.Add("Col5", typeof(string));
// dt.Columns.Add("2 тип А", typeof(A)); 

MyDataTable.Rows.Add("test", "img/Best/1.png", "img/Best/1.png", "img/Best/1.png");
MyDataTable.Rows.Add("TestString");

Items = MyDataTable;
this.DataContext = this;

1 Ответ

0 голосов
/ 07 мая 2020

Я признаю, что это что-то вроде сбоя для WPF, но вы почти у цели. Большая проблема заключается в том, что как только вы используете столбец шаблона, становится трудно получить индекс столбца, который необходимо привязать к таблице данных.

В любом случае, вместе с вашим конвертером он работает, если вы делаете ATemplate:

<DataTemplate x:Key="ATemplate">
    <Image 
        DataContext="{
            Binding RelativeSource={
            RelativeSource AncestorType=DataGridCell},
            Converter={StaticResource drvc}}" 
        Source="{Binding}" />
</DataTemplate>

(Yuk! и да, это примерно так же плохо, как WPF, это ужасное введение в фреймворк, по возможности избегать автоматически генерируемых столбцов, хотя я понимаю, что это может не возможно, WPF на самом деле является хорошей GUI структурой).

...