Как связать изображение класса в датагрид - PullRequest
0 голосов
/ 09 июля 2019

У меня есть класс ViewModel, в котором я устанавливаю изображение. Я задаю 1 изображение или другое изображение для этого свойства, и я не могу отобразить его.

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

Image ImgRed = new Image();
Image ImgGreen = new Image();
BitmapImage red = new BitmapImage(new Uri(@"C:\ProjetVisual\SmartieWpf\SmartieWpf\Img\bullet_red.png"));
BitmapImage green = new BitmapImage(new Uri(@"C:\ProjetVisual\SmartieWpf\SmartieWpf\Img\bullet_green.png"));
ImgRed.Source = red;
ImgGreen.Source = green;
if(item.Visibility == Visibility.Collapsed)
{
    item.Image = ImgGreen;
}
else
{
    item.Image = ImgRed;
}

DataGridTemplateColumn colDiff = new DataGridTemplateColumn
                {
                    Header = "Etat"
                };
double imgSize = 20.0;
DataTemplate DttEtat = new DataTemplate();
FrameworkElementFactory image = new FrameworkElementFactory(typeof(Image));
image.SetValue(Image.HeightProperty, imgSize);
image.SetValue(Image.WidthProperty, imgSize);
image.SetBinding(Image.SourceProperty, new Binding("Image.Source") { Source = bordereauViewModels });
image.SetValue(Image.SourceProperty, green);
DttEtat.VisualTree = image;
colDiff.CellTemplate = DttEtat;
dgBordereaux.Columns.Add(colDiff);

bordereauViewModels - это список, который я просматриваю, чтобы установить изображение в своем классе.

Ответы [ 2 ]

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

Я генерирую все столбцы своей таблицы с кодом, поэтому я не могу использовать xaml. Но я нашел решение, в моем классе я написал:

public Image Image { get; set; }

Где изображение - Windows.Controls.Image но источником является BitmapImage, и мне просто нужно красный и зеленый. мой функциональный код сейчас:

public BitmapImage Image { get; set; }

BitmapImage red = new BitmapImage(new Uri(@"C:\ProjetVisual\SmartieWpf\SmartieWpf\Img\bullet_red.png"));
BitmapImage green = new BitmapImage(new Uri(@"C:\ProjetVisual\SmartieWpf\SmartieWpf\Img\bullet_green.png"));
if(item.Visibility == Visibility.Collapsed)
{
    item.Image = green;
}
else
{
    item.Image = red;
}

DataGridTemplateColumn colDiff = new DataGridTemplateColumn
                {
                    Header = "Etat"
                };
double imgSize = 20.0;
DataTemplate DttEtat = new DataTemplate();
FrameworkElementFactory image = new FrameworkElementFactory(typeof(Image));
image.SetValue(Image.HeightProperty, imgSize);
image.SetValue(Image.WidthProperty, imgSize);
image.SetBinding(Image.SourceProperty, new Binding("Image"));
image.SetValue(Image.SourceProperty, green);
DttEtat.VisualTree = image;
colDiff.CellTemplate = DttEtat;
dgBordereaux.Columns.Add(colDiff);

Спасибо за вашу помощь.

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

В идеале, когда у вас есть модель View, вы не должны создавать какой-либо код управления позади. Либо вы создаете тип свойства зависимости изображения для конкретной сетки, либо создаете tmeplate в XAML, как

<DataGridTemplateColumn Header="Image" Width="SizeToCells"
 IsReadOnly="True">
   <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
           <Image Source="{Binding Uri}" />
      </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

Где Ури - твой путь в Viewmodel.

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