我无法使用Xamarin Forms将图像绑定到UriImageSource。
我已经实现了FlowListView,它提供了一个类似于网格的文本列表,但是与每个产品相关联的图像都没有出现。
有没有其他人知道如何解决这个问题?
<flv:FlowListView
Grid.Row="1"
x:Name="flvListView"
SeparatorVisibility="None"
HasUnevenRows="true"
FlowColumnMinWidth="110">
<flv:FlowListView.FlowColumnTemplate>
<DataTemplate>
<Grid Padding="3">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image HeightRequest="100" >
<Image.Source>
<UriImageSource Uri="{Binding ProductImage}" />
</Image.Source>
</Image>
<Label
x:Name="Label"
HorizontalOptions="Fill"
HorizontalTextAlignment="Center"
VerticalOptions="End"
BackgroundColor="Silver"
Opacity="0.5" Text="{Binding ProductName}"/>
</Grid>
</DataTemplate>
</flv:FlowListView.FlowColumnTemplate>
</flv:FlowListView>
public class vmProduct
{
public vmProduct() { }
/* removed other properties, constructors etc */
public UriImageSource ProductImage { get; set; }
public string ProductName { get; set; }
}
初始化vmProduct时
this.Products.Add(new vmProduct
{
ProductName = "Test",
ProductImage = new UriImageSource
{
Uri = new Uri("https://upload.wikimedia.org/wikipedia/en/5/5f/Original_Doge_meme.jpg")
}
});
(在上面的示例中,&#34;测试&#34;将出现,但图像不会出现)
答案 0 :(得分:6)
由于您将UriImageSource
绑定到Uri
,因此您的ViewModel
属性必须是Uri。
将public UriImageSource ProductImage { get; set; }
更改为public Uri ProductImage { get; set; }
答案 1 :(得分:0)
有相同的问题,并且我不知道这是否已更改,但是我发现您可以按以下方式将海峡绑定到图像源:
<Image HeightRequest="200" Source="{Binding ProductImage}"/>
然后在后面的代码上,您可以使用var,并让C#执行正确的强制转换:
public ImageSource ProductImage {
get {
var source = new Uri("http://myurl.com/one.jpg");
return source;
}
}
我喜欢的是,如果您想让代码与资源中的图像一起使用,我们只需像这样更改源代码行即可:
public ImageSource ProductImage {
get {
var source = "resource_image.png"
return source;
}
}
要记住的一件事是,它们似乎是在MacOS的Xamarin中通过TLS加载图像的问题,因此我建议坚持使用http或在Windows上构建。