我有一个简单的WPF应用程序的分层数据结构,如下所示:
TvshowCollection对象包含Tvshow对象。每个Tvshow对象都包含一个EpisodeCollection对象,该对象又包含Episode对象。该模型大量使用了INotifyPropertyChanged。
我需要在网格中显示所有Episode对象的列表,以及Tvshow的名称。
如果我从结构中获取所有剧集并将它们绑定到网格的ItemsSource,则很容易将剧集的每个属性绑定到列,但是如何将其中一个列绑定到相关的Tvshow在层次结构中较高的名称属性?
我可以在ViewModel中以某种方式展平数据吗?
我希望这是有道理的。
谢谢!
编辑:
感谢MAW74656,这就是我想要的最终结果 - 显示系统中的所有剧集,并在网格中重复Tvshow细节(Airdate是剧集的属性):
图片在这里:http://i.stack.imgur.com/SY1Ib.png
我现在有这个工作,在某种程度上,但不是我特别喜欢的方式。 我在ViewModel上放置了一个属性,以便Grid返回一个包含我需要的信息的对象:
public class TvshowGridViewModel : BaseViewModel
{
private Repository _repo;
private TvshowCollection _allTvshows;
public object AllTvshows
{
get
{
var flatList = from tvshow in _allTvshows
from episode in tvshow.Episodes
select new { TvshowName = tvshow.Name, EpisodeName = episode.Name, EpisodeNumber = episode.Number, EpisodeAirdate = episode.Airdate };
return flatList;
}
}
public TvshowGridViewModel()
{
_repo = new Repository("");
_allTvshows = _repo.Tvshows;
}
}
但我似乎无法将其作为双向约束。有没有更好的办法?
答案 0 :(得分:1)
尝试使用对象而不是字符串:
var flatList = from tvshow in _allTvshows
from episode in tvshow.Episodes
select new { TvShow = tvshow, Episode = episode};
DataGrid应该有明确指定的列:
<sdk:DataGridTextColumn Binding="{Binding TvShow.Name}" Header="Tv Show"/>
<sdk:DataGridTextColumn Binding="{Binding Episode.Name}" Header="Episode Name"/>