2010-12-02 86 views
1

我有一個簡單的WPF應用程序中的分層數據結構如下:綁定分級數據模型到DataGrid

甲TvshowCollection對象包含Tvshow對象。每個Tvshow對象都包含一個EpisodeCollection對象,該對象又包含Episode對象。該模型大量使用INotifyPropertyChanged。

我需要顯示網格中所有Episode對象的列表以及Tvshow的名稱。

如果我從結構中獲取所有的Episodes並將它們綁定到網格的ItemsSource,那麼很容易將Episode的每個屬性綁定到一個列,但是如何將其中一列綁定到相關的Tvshow在層次結構中名稱較高的屬性?

我可以以某種方式在ViewModel中展平數據嗎?

我希望這是有道理的。

謝謝!


編輯:

感謝MAW74656,這就是我想要的最終結果是 - 所有情節在系統中顯示的,與Tvshow詳細信息網格重複(廣播日是一個屬性集):

的形象在這裏:http://i.stack.imgur.com/SY1Ib.png

我有這個現在的工作,在一定程度上,但不是在說我特別喜歡的一種方式。 我已經提上了一個視圖模型屬性爲網格返回一個包含我所需要的信息的對象:

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

請加你想如何看一個例子。我相信我在SQL中做了類似的事情,但是我們應該能夠將其應用於C#。 – MAW74656 2010-12-02 20:19:51

回答

0

嘗試改用字符串對象:

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"/> 
+0

謝謝,我會嘗試。使用此代碼獲取'get',是否也可以在網格中編輯後使用雙向綁定來設置屬性? – Lefty 2010-12-02 23:14:31