我已将代码更改为:
观点:
<phone:Panorama.ItemTemplate>
<DataTemplate>
<ScrollViewer Width="800" HorizontalContentAlignment="Left" Margin="0,50,0,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListBox x:Name="list_of_images" ItemsSource="{Binding ImagesUrls}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Image Width="300" Height="300" Source="{Binding}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ListBox>
<TextBlock Text="{Binding Title}"
Grid.Row="1"
Loaded="TextBlock_Loaded_1"
Margin="50,0,0,0"
FontSize="23"
TextWrapping="Wrap"
Width="360"
HorizontalAlignment="Left"
Foreground="Black"/>
<TextBox Text="{Binding ContactEmail}"
Grid.Row="2"
BorderBrush="Black"
Width="340"
HorizontalAlignment="Left"
BorderThickness="1"
Margin="40,0,0,0"
Foreground="Black" />
<TextBlock Text="{Binding Body}"
Grid.Row="3"
TextWrapping="Wrap"
Foreground="Black"
Margin="50,5,0,0"
Width="360"
HorizontalAlignment="Left"
FontSize="20" />
</Grid>
我构建了一个具有不同属性的新对象,其中一个属性是表示图像的字符串列表,但我无法显示图像?
我附上了截图,我必须更改我的xaml中的内容以便我可以显示图像,因为此刻它不会显示任何图像但显示所有其他详细信息
填充集合的代码:
ObservableCollection<ClassifiedAds> klasifiseerd_source = new ObservableCollection<ClassifiedAds>();
ImagesClassifieds new_Classifieds = new ImagesClassifieds();
ObservableCollection<string> gallery_images = new ObservableCollection<string>();
new_Classifieds.Title = klasifiseerd_source[0].Title;
new_Classifieds.ContactEmail = klasifiseerd_source[0].ContactEmail;
new_Classifieds.Body = klasifiseerd_source[0].Body;
foreach (var item in klasifiseerd_source[0].Gallery.Images)
{
var deserialized = JsonConvert.DeserializeObject<GalleryImages>(item.ToString());
gallery_images.Add(deserialized.ImageUrl);
//new_Classifieds.ImageUrls.Add(deserialized.ImageUrl);
}
new_Classifieds.ImageUrls = gallery_images;
// classifiedPanorama.ItemsSource = new_list;
new_Classifieds_list.Add(new_Classifieds);
classifiedPanorama.ItemsSource = new_Classifieds_list;
public class ImagesClassifieds
{
public string Title { get; set; }
public string ContactEmail { get; set; }
public string Body { get; set; }
public ObservableCollection<string> ImageUrls { get; set; }
}
这是imageurl格式,这是有效的(在我的应用程序的另一部分,我只是以这种格式绑定到1个图像,它完美地工作)
答案 0 :(得分:2)
根据您是只想显示图像列表还是希望能够选择它们,您可以选择ItemsControl或ListBox。在这两种情况下,您都必须定义一个DataTemplate来控制每个项目的显示方式。
<ItemsControl ItemsSource="{Binding Images}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
或
<ListBox ItemsSource="{Binding Images}">
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
然后你应该考虑如何定义你的项目类。如果您希望能够从列表中动态添加或删除图像并让UI自动更新,则应使用ObservableCollection
作为容器类型。由于存在从string
到ImageSource
的内置类型转换(图像控件的Source
属性的类型),因此您只需使用ObservableCollection<string>
。
public class Gal
{
public ObservableCollection<string> Images { get; set; }
}
您可以像这样创建该类的实例:
var gallery = new Gal();
gallery.Images = new ObservableCollection<string>(
Directory.EnumerateFiles(@"C:\Users\Public\Pictures\Sample Pictures", "*.jpg"));
现在,您可以通过简单地将Window的DataContext(或应该显示图像列表的位置)设置为此实例来直接绑定到该实例:
DataContext = gallery;
注意上面的ItemsControl或ListBox中的绑定声明是{Binding Images}
。如果你真的必须拥有一个属性Gallery
(我假设它在MainWindow中)并像{Binding Gallery.Images}
一样绑定你可以像这样设置DataContext:
DataContext = this;
答案 1 :(得分:0)
所以我基本上在列表框上创建了一个加载的事件并添加了这段代码
private void list_of_images_Loaded_1(object sender, RoutedEventArgs e)
{
ListBox lst = (ListBox)sender;
lst.ItemsSource = new_Classifieds_list[0].ImageUrls;
}
将列表框的itemssource绑定到imageurl列表。因为我无法从代码隐藏中访问列表框,因为它位于全景图的itemstemplate
中