Как изменить значение Source= ,элемента Image DataTemplate в DataGrid wpf C#

  1. Подскажите как изменить значение Source="img/Best/1.png" для ячейки DataGrid на которую нажал, кликом , клавишей, любым вариантом.
  2. Как связать и значение в ячейке DataGrid взятое с DataTables . Пробивал разные варианты, ничего не вышло, сложный wpf для новичка. Очень нравиться кодить, но тут я застрял на 5 дней.

Суть программы для составления схем для вязания: Будет "список картинок" и DataGrid, привязная к DataTable. Выбираем картинку (Условное обозначение) и при клике на клетку , нужно присвоить путь картинки в элемент Image, (как бы, рисовать картинкой по клетках). введите сюда описание изображения Скриншот Сетки DataGrid

На сайт MSDN не отправлять, я там постоянно. Как я понял, на WPF так не получиться, возвращаюсь к Windows Forms .

Код XAML:

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

cs Код:

DataGrid MyGrid = new DataGrid();

        System.Data.DataTable dt = new System.Data.DataTable();
        dt.Columns.Add("Col1", typeof(string));
        dt.Columns.Add("Col2", typeof(string));

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

        Items = dt;
        this.DataContext = this;

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        DataTemplate dt = null;
        if (e.PropertyType == typeof(string))
            dt = (DataTemplate)Resources["ATemplate"];
        else if (e.PropertyType == typeof(B))
            dt = (DataTemplate)Resources["BTemplate"];

        if (dt != null)
        {
            DataGridTemplateColumn c = new DataGridTemplateColumn()
            {
                CellTemplate = dt,
                Header = e.Column.Header,
                HeaderTemplate = e.Column.HeaderTemplate,
                HeaderStringFormat = e.Column.HeaderStringFormat,
                SortMemberPath = e.PropertyName // this is used to index into the DataRowView so it MUST be the property's name (for this implementation anyways)
            };
            e.Column = c;
        }
    }


   public class DataRowViewConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        DataGridCell cell = value as DataGridCell;
        if (cell == null)
            return null;

        System.Data.DataRowView drv = cell.DataContext as System.Data.DataRowView;
        if (drv == null)
            return null;

        return drv.Row[cell.Column.SortMemberPath];
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

Ответы (0 шт):