好的,所以我有这个listView,它应该显示一堆项目,每个项目至少包含一张照片。
这个想法是在listCell中显示主要照片,当选择一个项目时,它的详细信息显示在不同的表单页面中,并且应该能够访问它的所有照片。
当项目没有照片时,它会显示资源中的占位符。
问题:无法从URI加载图像,将图像源绑定到包含特定URI obj的list属性(来自viewModel),或者将其绑定到包含now strings的同一属性,或者通过
<Image.Source>
<UriImageSource Uri="{Binding MainPhotoSource}" />
</Image.Source>
不管。这些似乎都不起作用。
已经向Xamarin团队寻求帮助,他们的回答是来到这里,或者去论坛(我已经做了,已经等了将近两个月了,现在,工作需要交付)......
请帮忙吗?
修改 这是ViewModel代码的一部分。
在第一种方法中,对于从WCF收到的每个项目,我将此ItemDto obj的格式添加到此ObservableCollection列表中。
// Sets this List observable collection to a new ItemDto obj,
// with certain properties from the Item.Find result[].
ObservableCollection<ItemDto> SetList(Item.Find[] result)
{
ObservableCollection<ItemDto> collection = new ObservableCollection<ItemDto>();
foreach (Item.Find item in result)
{
collection.Add(GetDto(item));
}
return collection;
}
// Gets a new ItemDto obj with the required fields from Item.Find obj.
ItemDto GetDto(Item.Find item)
{
return new ItemDto()
{
ID = item.ID,
UserID = item.User_ID,
MainPhotoSource = new Uri(_serverInbox + item.MediaItems[0].RelativeUrl),
Title = item.Title,
Description = item.Description,
Category = item.Category_Name,
DateCreated = GetFormatedDateCreated(item.DateCreated)
};
}
答案 0 :(得分:3)
UriImageSource的Uri属性需要一个Uri而不是一个字符串。但是您可以在View Model中使用URI Bindable属性并绑定到它:
查看模型
j>0
查看
public string ProductNo
{
get { return _productNo}
set
{
if (_productNo != value)
{
_productNo = value;
RaisePropertyChanged();
RaisePropertyChanged(() => ThumbnailImageUri);
}
}
}
public Uri ThumbnailImageUri
{
get
{
if (_thumbnailImageUri == null)
{
_thumbnailImageUri = new Uri(String.Format("http://www.YOURWEBSITE.com/{0}.jpg", _productNo));
}
return _thumbnailImageUri;
}
}
答案 1 :(得分:2)
这是什么对我有用 - 希望这能帮到你
首先是我的BindingContext:
public class ItemContainer
{
public ItemContainer()
{
Collection = SetList(new[] { "1", "2", "3", "4" });
}
ObservableCollection<ItemDto> SetList(string[] result)
{
ObservableCollection<ItemDto> collection = new ObservableCollection<ItemDto>();
foreach (string item in result)
{
collection.Add(GetDto(item));
}
return collection;
}
public ObservableCollection<ItemDto> Collection { get; set; }
ItemDto GetDto(string item)
{
return new ItemDto() { MainPhotoSource = new Uri(_serverInbox + item) };
}
}
我的Page1.xaml看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="App1gcm.Page1">
<ListView ItemsSource="{Binding Collection}" VerticalOptions="Center" HorizontalOptions="Center" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Image Source="{Binding MainPhotoSource}" />
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage>
我将它们合并为在App.cs中创建MainPage:
public App()
{
// The root page of your application
MainPage = new Page1
{
BindingContext = new ItemContainer()
};
}