我有一个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种类型。相同的类型意味着相同的图片。我在引用UI的性能方面遇到了很多问题。特别是当我的后台任务在设置一列的状态后调用UI时。但是初始化GridView(除了UI之外没有任何其他线程)需要很长时间。取消激活图像列可以解决问题。
我现在正在寻找几个小时,并尝试过很多东西。
我已经将图片放入资源并通过
使用它们this.imagePathIcon = "pack://application:,,,/Etlxxx;component/GraphicUserInterface/Images/image.jpg";
我声明绑定到异步,所以至少UI不会冻结。
在我看来,问题在于每一行都会加载图像,即使它们使用相同的图片。可能是因为我刚刚限制了这条道路。根据我的知识,没有办法直接绑定图像。
一切正常。但我可以看到每个图像都是单独加载的。我真的很困惑。
图片非常小(16x16),但仍然会降低整个应用程序的速度。
有没有办法将同一图像绑定到DataGrid中的多行。理想情况下,应用程序必须加载一次图像并立即在其所属的每一行中显示它。
感谢您的帮助!
答案 0 :(得分: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”目录中。
答案 1 :(得分:0)
您当然可以直接绑定到图像,而不是图像路径网址。
只需声明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/GraphicUserInterface/Images/image.jpg"));
或来自之前创建的BitmapSource:
item.StatusImage = somePreloadedBitmapImage;
或者来自XAML资源:
item.StatusImage = (ImageSource)Resources["imageResourceKey"];