Могу ли я использовать разные шаблоны для разных типов элементов в ListBox? - PullRequest
4 голосов
/ 22 мая 2010

Изобразите список в Silverlight, который похож на «канал» на Facebook.Каждый элемент может представлять собой: 1) обновление статуса с изображением слева, 2) миниатюру фотографии с заголовком, 3) видео на YouTube или 4) запись в блоге.Каждый элемент использует свой шаблон.Как бы вы достигли этого?

Я планировал, чтобы на всех моих типах элементов был реализован общий интерфейс.Это означало бы, что я передам список IFeedItem.

public interface IFeedItem
{
   DateTime Published { get; set; }
   string Owner { get; set; }
   string SourceUrl { get; set; }
}

public class StatusUpdateFeedItem : IFeedItem
{
   DateTime Published { get; set; }
   string Owner { get; set; }
   string SourceUrl { get; set; }
   ... more
}

public class PhotoFeedItem : IFeedItem
{
   DateTime Published { get; set; }
   string Owner { get; set; }
   string SourceUrl { get; set; }
   ... more
}

public class VideoFeedItem : IFeedItem
{
   DateTime Published { get; set; }
   string Owner { get; set; }
   string SourceUrl { get; set; }
   ... more
}

public class BlogEntryFeedItem : IFeedItem
{
   DateTime Published { get; set; }
   string Owner { get; set; }
   string SourceUrl { get; set; }
   ... more
}

//build the list
var list = new List<IFeedItem>
{
    new StatusUpdateFeedItem(),
    new PhotoFeedItem(),
    new VideoFeedItem(),
    new BlogEntryFeedItem()
}

ListBox1.ItemsSource = list;

После этого я предполагал, что ListBox будет достаточно умным, чтобы каким-то образом выбрать шаблон на основе типа элемента.

1 Ответ

4 голосов
/ 23 мая 2010

Я нашел отличное решение этой проблемы на http://geekswithblogs.net/tkokke/archive/2009/09/28/datatemplateselector-in-silverlight.aspx.

...