我试图在其他数据旁边的DataGrid-Column中显示图像。 我的模型看起来像这样:
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
public Bitmap Image { get; set; }
}
ViewModel:
public ObservableCollection<Person> Persons
{
get
{
return this.persons;
}
set
{
this.persons = value;
}
}
我的DataGrid是这样的:
<DataGrid Name="Persons"
Grid.Row="1"
Grid.Column="0"
Margin="10"
AutoGenerateColumns="False"
IsReadOnly="True"
ItemsSource="{Binding Path=Persons}">
<DataGrid.Columns>
<DataGridTemplateColumn Width="80">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="120"
Binding="{Binding Path=Name}"
Header="Name" />
<DataGridTextColumn Width="120"
Binding="{Binding Path=Address}"
Header="Address" />
</DataGrid.Columns>
</DataGrid>
名称和地址显示正确,但图片为空... 你知道我做错了吗?
提前致谢并度过愉快的一天
答案 0 :(得分:2)
如果您的Image
属于System.Drawing.Bitmap
,则应将其更改为System.Windows.Media.Imaging.BitmapImage
,然后同时更改Image.Source
绑定,此绑定此时绑定到整个Person
对象为Image
属性
<Image Source="{Binding Image}" />
答案 1 :(得分:1)
尝试使用该代码显示图片:
<DataGridTemplateColumn Width="80">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Image}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
答案 2 :(得分:0)
在项目中添加图像文件夹,并将图像添加到同一文件夹中。使用以下代码访问
<Columns>
<ItemTemplate >
<asp:ImageButton ID="ImageButton1" runat ="server" CommandName="Preview" ImageUrl="~/images/MSWord_Icon.jpg"/>
</ItemTemplate>
</Columns>
答案 3 :(得分:0)
您需要为图像设置一些高度和宽度,如
<Image Source="{Binding}" Height="200" Width="200"/>
答案 4 :(得分:0)
xmlns:converter="clr-namespace:ProjectName.Converters"
<Window.Resource>
<converter:BindableConverter x:Key="bindableConverter"/>
</Window.Resource>
<DataGridTemplateColumn Header="HeaderName">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image x:Name="BindImg" Height="35" Width="35" Source="{Binding IsBindable,Converter={StaticResource bindableConverter}}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
public class BindableConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string imageSource = string.Empty;
bool isBinded;
if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
{
imageSource = "../../Resource/Images/unbinded.jpg";
}
if (Boolean.TryParse(value.ToString(), out isBinded))
{
if (isBinded)
{
imageSource = "../../Resource/Images/binded.jpg";
}
else
{
imageSource = "../../Resource/Images/unbinded.jpg";
}
}
return imageSource;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}