绑定到ListBox中的ListBox [英] Binding to a ListBox in a ListBox
问题描述
大家好,
我试图将一个小的电视指南应用程序放在一起,但是绑定到查询的信息时遇到了一些麻烦.
计划要有一个ListBox,其中每个项目都包含一个图像和/或频道名称,以及另一个ListBox(仅用于确认,ListBox项目中的一个ListBox),其中将包含该频道的所有即将上映的电视节目. br/>
我发现了与我想做的事情非常相似的事情,但是我似乎无法使它正常工作,有人能看到我做错了吗?
Hello All,
I am trying to put together a small TV Guide Application and I am having some trouble Binding to the queried information.
The plan is to have a ListBox where each Item contain an Image and/or the Channel Name and another ListBox (just to confirm, that''s a ListBox in a ListBox Item) which will contain all the upcoming TV programs for that channel.
I found something very similar to what I''d like to do but I can''t seem to get it to work, can anybody see what I''m doing wrong?
<ListBox x:Name="TVGuideListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<DockPanel>
<TextBlock MinWidth="160" Text="{Binding Path=Channel.ChannelName}" DockPanel.Dock="Left" />
<ListBox ItemsSource="{Binding Path=Program}" BorderThickness="0">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" IsItemsHost="True"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Title}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
namespace TVGuide
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
///
public partial class MainWindow : Window
{
TVDataContext TVDC = new TVDataContext();
public MainWindow()
{
InitializeComponent();
LoadChannels();
}
public class Channel
{
public string ChannelName { get; set; }
public string ChannelID { get; set; }
}
public class Program
{
public string StartTime { get; set; }
public string StopTime { get; set; }
public string ChannelID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
public class exChannels
{
public List<Channel> ChannelInfo { get; set; }
public List<Program> ProgramInfo { get; set; }
public exChannels(List<Channel> ch, List<Program> prog)
{
ChannelInfo = ch;
ProgramInfo = prog;
}
}
public void LoadChannels()
{
DateTime time = DateTime.Now.ToUniversalTime(); // Use current time
string format = "yyyy MM d HH mm"; // Use this format
string timevalue2 = Regex.Replace(time.ToString(format), @"[\D]", "");
decimal currenttime_dec = (Convert.ToDecimal(timevalue2) * 100);
XDocument xmlDoc = XDocument.Load(@"C:\iceguide.xml");
var ChannelsQuery = (from s in TVDC.tv_CHANNELs
orderby s.channel_ID
select new Channel
{
ChannelName = s.channel_NAME,
ChannelID = s.guide_ID
}).ToList<Channel>();
foreach (var s in ChannelsQuery)
{
var ProgramQuery = (from c in xmlDoc.Descendants("programme")
where c.Attribute("channel").Value == s.ChannelID
select new Program
{
StartTime = c.Attribute("start").Value,
StopTime = c.Attribute("stop").Value,
ChannelID = c.Attribute("channel").Value,
Title = c.Element("title").Value,
Description = c.Element("desc").Value
}).ToList<Program>();
exChannels exChannel = new exChannels(ChannelsQuery, ProgramQuery);
TVGuideListBox.Items.Add(exChannel);
}
}
}
}
我在树错树上吠叫吗?任何帮助,甚至是正确方向的帮助,都将不胜感激.
预先谢谢您,
亲切的问候,
Alex
Am I barking up the wrong tree? Any help or even a kick in the right direction would be greatly appreciated.
Thank you in advance,
Kind Regards,
Alex
推荐答案
与其尝试将ListBox放在另一个ListBox中,不如将其按Channel分组在一个ListBox中.搜索如何使用CollectionViewSource对ListBox中的项目进行分组. 列表框分组,排序,小计和可折叠区域 [ ^ ]是一个好的开始.祝你好运!
Instead of tryin to put a ListBox inside another ListBox, you should rather Group the items in one ListBox by Channel. Search for how to group items in a ListBox using a CollectionViewSource. ListBox Grouping, Sorting, Subtotals and Collapsible Regions[^] is agood start. Good luck!
这篇关于绑定到ListBox中的ListBox的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!