2017-02-14 9 views
0

У меня есть DataGrid с несколькими привязками для каждого столбца. Один столбец для изображения. Я уже нашел, что следующий способ работает для привязки изображений в wpf DataGrid.WPF: привязка одного и того же изображения к нескольким строкам в DataGrid (улучшение производительности)

<DataGridTemplateColumn Header="" Width="SizeToCells" IsReadOnly="True"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Image Width="16" Height="16" Source="{Binding imagePathStatus, IsAsync=True}"/> 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 
public class DataGridObject 
{ 
    public String imagePathStatus { get; set; } 

    ... 
} 

Это состояние и есть 3 типа. Тот же тип означает ту же картину. У меня было много проблем, связанных с производительностью пользовательского интерфейса. Особенно, когда моя фоновая задача вызывает пользовательский интерфейс после установки статуса одного столбца. Но также инициализация GridView (без каких-либо других потоков, помимо пользовательского интерфейса) занимает много времени. Проблема заключается в деактивации столбца изображения.

Я ищу сейчас часами и много пробовал.

Я уже поместить изображения в ресурсы и использует их через

this.imagePathIcon = "pack://application:,,,/Etlxxx;component/GraphicUserInterface/Images/image.jpg"; 

объявляю связывание с асинхронном, так по крайней мере, интерфейс не будет замерзать.

На мой взгляд, проблема в том, что каждая строка загружает изображение, даже если оно использует одно и то же изображение. Наверное, потому что я просто связал путь. По моим сведениям, нет способа напрямую привязать образ.

Все работает нормально. Но я вижу, что каждое изображение загружается отдельно. Я действительно смущен.

Фотографии действительно маленькие (16x16), но все же замедляют работу всего приложения.

Есть ли способ связать одно и то же изображение с несколькими строками в DataGrid. В идеале приложение должно загружать изображение один раз и отображать его сразу в каждой строке, где он принадлежит.

Благодарим за помощь!

+1

«По моим сведениям, не существует способа непосредственного связывания изображение". Это неправда. Объявить свойство типа «ImageSource», например. 'public ImageSource StatusImage {get; задавать; } 'и назначить BitmapImage, например' StatusImage = new BitmapImage (новый Uri ("pack: // application: ,,, Etlxxx; component/GraphicUserInterface/Images/image.jpg")) '. Затем привяжите свойство «Источник» элемента управления Image, например '' – Clemens

+0

. Это решило проблему. Большое спасибо. Возможно ли отметить ваш комментарий как решение? – theawak3r

ответ

0

Вы можете, конечно, напрямую привязываться к изображению, а не к URL-адресу пути к изображению.

Просто объявите свойство типа ImageSource, например.

public class DataGridObject 
{ 
    public ImageSource StatusImage { get; set; } 
    ... 
} 

и привязать к нему так:

<Image Source="{Binding StatusImage}"/> 

Теперь вы можете назначить BitmapImage (или какой-либо другой ImageSource производный объект), например,прямо так:

item.StatusImage = new BitmapImage(new Uri(
    "pack://application:,,,/Etlxxx;component/GraphicUserInte‌​rface/Images/image.j‌​pg")); 

или из ранее созданного BitmapSource:

item.StatusImage = somePreloadedBitmapImage; 

или также из XAML ресурсов:

item.StatusImage = (ImageSource)Resources["imageResourceKey"]; 
+0

Большое спасибо. Зная, что я могу даже привязать изображение, открывает все новые возможности. – theawak3r

0

Использовать статический ресурс.

<Window.Resources> 
    <BitmapImage x:Key="MyImageSource" UriSource="./images/error.png" /> 
</Window.Resources> 
<Grid> 
    <DataGrid Name="dataGrid" > 
     <DataGrid.Columns> 
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Image Width="16" Height="16" Source="{StaticResource MyImageSource}"/> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

Предполагая, что изображение находится в каталоге "images".

+0

Спасибо за участие. Я попробую это. Но статус будет изменяться во время выполнения. Есть ли способ кодирования ссылки на статический источник из одной строки? В идеале через Binding ... – theawak3r