【问题标题】:C# binding images from a List inside a ObservableCollection to show in LongListSelectorC# 绑定 ObservableCollection 中列表中的图像以显示在 LongListSelector 中
【发布时间】:2014-04-14 13:18:56
【问题描述】:

我有一个问题,我试图在我的 LongListSelector 中显示我的列表中的一些图像,但是当我尝试将我的 LongListSelector 绑定到包含我的图像的列表时,它不会显示任何图像。

我在 XAML 中的 LongListSelector:

<phone:PivotItem Header="Images">
        <Grid>
            <phone:LongListSelector LayoutMode="Grid" IsGroupingEnabled="True" GridCellSize="180,180" Margin="0,0,-12,0" ItemsSource="{Binding}">
            <phone:LongListSelector.ItemTemplate>
                <DataTemplate>
                    <Grid Background="{StaticResource PhoneAccentBrush}" Margin="5">
                        <StackPanel>
                                <Image Source="{Binding Images}"></Image>
                        </StackPanel>
                    </Grid>
                </DataTemplate>
            </phone:LongListSelector.ItemTemplate>
            </phone:LongListSelector>
        </Grid>
    </phone:PivotItem>

和我的数据上下文:

this.DataContext = gd.GetGameItems;

绑定到我的 LongListSelector 的 ObservableCollection 包含我的列表图像:

private ObservableCollection<GetGame> _GetGameItems = new ObservableCollection<GetGame>();
public ObservableCollection<GetGame> GetGameItems
{
    get
    {
        return this._GetGameItems;
    }
}

读取 XML 和存储数据的代码。 GetImages 方法是我从 XML 中获取图像并将它们放入我的 List(Images) 的地方,我想在我的 LongListSelector 中显示这些图像。 GetGame 类是我存储数据的地方:

var feedXml = XDocument.Parse(e.Result);

        var gameData = feedXml.Root.Descendants("Game").Select(x => new GetGame
        {
            ID = (int)x.Element("id"),
            GameTitle = (string)x.Element("GameTitle"),
            Platform = (string)x.Element("Platform"),
            ReleaseDate = (string)x.Element("ReleaseDate"),
            Images = GetImages(x).ToList(),
        })
          .ToList();
        foreach (var item in gameData) GetGameItems.Add(item);
    }
}

private static IEnumerable<Uri> GetImages(XElement gameNode)
{
    return gameNode
              .Descendants("boxart")
              .Select(t => new Uri("http://thegamesdb.net/banners/" + (string)t.Attribute("thumb")));
}

public class GetGame
{
public int ID { get; set; }
public string GameTitle { get; set; }
public string Platform { get; set; }
public string ReleaseDate { get; set; }
public List<Uri> Images { get; set; }

} 这是我的 XML:

<Data>
  <baseImgUrl>http://thegamesdb.net/banners/</baseImgUrl>
  <Game>
    <id>2</id>
    <GameTitle>Crysis</GameTitle>
     <PlatformId>1</PlatformId>
     <Platform>PC</Platform>
     <ReleaseDate>11/13/2007</ReleaseDate>
     <Overview>
     From the makers of Far Cry, Crysis offers FPS fans the best-looking, most highly-        evolving gameplay, requiring the player to use adaptive tactics and total customization of    weapons and armor to survive in dynamic, hostile environments including Zero-G. Earth, 2019. A team of US scientists makes a frightening discovery on an island in the South China Sea. All contact with the team is lost when the North Korean Government quickly seals off the area. The United States responds by dispatching an elite team of Delta Force Operators to recon the situation. As tension rises between the two nations, a massive alien ship reveals itself in the middle of the island. The ship generates an immense force sphere that freezes a vast portion of the island and drastically alters the global weather system. Now the US and North Korea must join forces to battle the alien menace. With hope rapidly fading, you must fight epic battles through tropical jungle, frozen landscapes, and finally into the heart of the alien ship itself for the ultimate Zero G showdown.
    </Overview>
    <ESRB>M - Mature</ESRB>
    <Genres>
    <genre>Shooter</genre>
    </Genres>
    <Players>4+</Players>
    <Co-op>No</Co-op>
    <Youtube>http://www.youtube.com/watch?v=i3vO01xQ-DM</Youtube>
    <Publisher>Electronic Arts</Publisher>
    <Developer>Crytek</Developer>
    <Rating>8.1111</Rating>
    <Images>
      <fanart>
        <original width="1920" height="1080">fanart/original/2-1.jpg</original>
        <thumb>fanart/thumb/2-1.jpg</thumb>
      </fanart>
      <fanart>
        <original width="1920" height="1080">fanart/original/2-2.jpg</original>
        <thumb>fanart/thumb/2-2.jpg</thumb>
      </fanart>
      <fanart>
        <original width="1920" height="1080">fanart/original/2-3.jpg</original>
        <thumb>fanart/thumb/2-3.jpg</thumb>
      </fanart>
      <fanart>
        <original width="1920" height="1080">fanart/original/2-4.jpg</original>
        <thumb>fanart/thumb/2-4.jpg</thumb>
      </fanart>
      <fanart>
        <original width="1920" height="1080">fanart/original/2-5.jpg</original>
        <thumb>fanart/thumb/2-5.jpg</thumb>
      </fanart>
      <fanart>
        <original width="1920" height="1080">fanart/original/2-6.jpg</original>
        <thumb>fanart/thumb/2-6.jpg</thumb>
      </fanart>
    <boxart side="back" width="1525" height="2162" thumb="boxart/thumb/original/back/2-1.jpg">boxart/original/back/2-1.jpg</boxart>
    <boxart side="front" width="1525" height="2160" thumb="boxart/thumb/original/front/2-1.jpg">boxart/original/front/2-1.jpg</boxart>
    <banner width="760" height="140">graphical/2-g2.jpg</banner>
    <banner width="760" height="140">graphical/2-g3.jpg</banner>
      <screenshot>
        <original width="1920" height="1080">screenshots/2-1.jpg</original>
        <thumb>screenshots/thumb/2-1.jpg</thumb>
      </screenshot>
    <clearlogo width="400" height="95">clearlogo/2.png</clearlogo>
    </Images>
  </Game>
</Data>

所以,问题是让这个带有图像的列表显示在我的 LongListSelector 中。我不知道这是否与我的列表图像在我的 ObservableCollection GetGameItems 中有关:

public List<Uri> Images { get; set; }

所以我希望有人可以帮助我,谢谢。

【问题讨论】:

    标签: c# xml image binding longlistselector


    【解决方案1】:

    您正在尝试将列表分配为图像源,但这不起作用。如果要绑定到 Image,则需要具有 Image 的属性。

    这是一个关于如何做的示例,

     public class PhotoItem
        {
            public string Name { get; set; }
            public BitmapImage Photo { get; set; }
    
            public static List<PhotoItem> getPhotos()
            {
                PhotoItem one = new PhotoItem();
                one.Photo = new BitmapImage(new Uri("",UriKind.Relative));
                one.Name = "Image1";
    
                PhotoItem two = new PhotoItem();
                two.Photo = new BitmapImage(new Uri("", UriKind.Relative));
                two.Name = "Image1";
    
                List<PhotoItem> Photos = new List<PhotoItem>();
                Photos.Add(one);
                return Photos;
            }
    

    您的 ViewModel,

    class PhotoItemViewModel : INotifyPropertyChanged
        {
            private ObservableCollection<PhoneApp1.Model.PhotoItem> _photoList;
            public ObservableCollection<PhoneApp1.Model.PhotoItem> PhotoList
            {
                get
                {
                    return _photoList;
                }
    
                set
                {
                    _photoList = value;
                    OnPropertyChanged();
                }
    
    
            }
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
            {
                PropertyChangedEventHandler handler = PropertyChanged;
                if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
            }
    
            public void LoadData()
            {
                _photoList = new ObservableCollection<Model.PhotoItem>(Model.PhotoItem.getPhotos());
    
            }
        }
    

    XAML,

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <phone:LongListSelector ItemsSource="{Binding PhotoList}">
                <phone:LongListSelector.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock Text="{Binding Name}"></TextBlock>
                            <Image Source="{Binding Photo}"></Image>
                        </StackPanel>           
                    </DataTemplate>
                </phone:LongListSelector.ItemTemplate>            
            </phone:LongListSelector>
        </Grid>
    

    后面的代码:

    public MainPage()
            {
                InitializeComponent();
                ViewModel.PhotoItemViewModel _vm = new ViewModel.PhotoItemViewModel();
                this.DataContext = _vm;
            }
    

    【讨论】:

    • 抱歉,我对您发布的代码有点困惑,没有其他方法可以解决我的问题吗?
    • 可以修复,您不能将 uri 列表绑定到图像控件。ok 将修复并发布您的代码
    • 我尝试使用您的示例并在代码中使用这些 URL:PhotoItem one = new PhotoItem(); one.Photo = new BitmapImage(new Uri("thegamesdb.net/banners/boxart/thumb/original/back/2-1.jpg", UriKind.Absolute)); one.Name = "Image1";照片项目二 = 新照片项目();二.Photo = new BitmapImage(new Uri("thegamesdb.net/banners/boxart/thumb/original/front/2-1.jpg", UriKind.Absolute));二.Name = "Image1";但它什么也没显示。
    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2014-05-30
    • 2013-12-14
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多