2014-03-26 35 views
2

我的具體問題背後有大量代碼,所以我將嘗試理解我試圖實現的方法,而不是提供/請求任何編碼示例。話雖如此,我將在此後發佈並接受盡可能多的代碼,以達到此級別的理解 - 我們將看看這是怎麼回事!數據在C#中使用Linq-to-SQL將嵌套ListView綁定到ObservableCollection WPF

上下文:

我已經開發了一個嵌套的ListView。這是一個ListView,它包含每個ListViewItem中的另一個ListView(如果喜歡,可以使用一個List-View-Ception)。

奕列表視圖需要從一個表中包含的數據,和嵌套列表視圖需要包含從相關表中的數據(與外鍵鏈接)

本來,我開發了定義一個嵌套的ObservableCollection類(有在class/listview中的數據比它嵌套的集合更多 - 但我們暫時忽略這一點!)。

然後我:

  • 填充用我的SQL數據庫類的尋找有吸引力的環
  • 填充換過吸引力環每個嵌套集合的ObservableCollection;手動從相關表
  • 設置的DataContext我的ListView的集合中選擇正確的數據
  • 終於在XAML中設置的綁定值等於

問題就解決了我的觀察集合的類的公共名。問題回答。非常感謝你。

然後我:

  • 發現LINQ到SQL
  • 刪除了我的SQL數據庫類
  • 刪除了我的ObservableCollection類
  • 持續缺失,橫衝直撞,將由我的程序中的變量被記住未來幾年。

因此,我創建了Linq-to-SQL類,連接到我的數據庫並將表拖入提供的接口中。

當我親眼目睹designer.cs的內容時,我感到非常震驚 - 這是一個完美的模型化結構,它完美地代表了我的兩張桌子,我不得不停下來敬畏。

然後我:

  • 創建一個新的類,它繼承了一個ObservableCollection(表在我的數據庫)
  • 將一個foreach循環在我的新類的構造函數來填充集合
  • 創建我的第一個對象,發送一個Linq-to-Sql類的數據上下文對象(又名:在我的表中創建一個數據集合)
  • 重新命名我的綁定路徑值以匹配我的列數據庫
  • 在我的鍵盤上消除了F5鍵

Listview包含數據 - 必須說,這個系統給我留下了深刻的印象。

問題:

然而,嵌套列表視圖每個項目是空的!

所以,我則:

  • 經過數據庫;第二個表包含的數據,與外鍵
  • 在designer.cs注意的正確鏈接,該嵌套的數據將被存儲在一個的EntitySet
  • 調試並經過所述的ObservableCollection

我發現的數據,是印象深刻的是,Linq-To-SQL類已經根據外鍵值將第二個表格數據正確地分隔到了每個收集項目。其實我印象非常深刻。

但是,我不知道如何綁定這些值並讓它們顯示!他們在這裏(調試):

- TheDataContextObject[N-Item]->TheNestedEntitySet->non-public members->entities->[The List of Nested Data for that Item] 

在EntitySet的數據是正確的 - 我只是不明白,我怎麼可以綁定到這些值。

所有幫助表示讚賞 - 我會嘗試和改進的問題隨着時間流逝的總體質量,並會向所有人開放的建議。

非常感謝。

+0

發現實體框架,請^ - ^。哦,還有MVVM。 – UIlrvnd

+0

@StefanDenchev - 很高興。你能否提供給我一個推薦的鏈接,我不可能在谷歌搜索中找到我即將做出的......謝謝。 – Robert

+1

當然,[這裏](http://reedcopsey.com/series/windows-forms-to-mvvm/)的MVVM,你可以查看[Julie Lerman](http://thedatafarm.com/blog/)' s教程在pluralsight .. – UIlrvnd

回答

0

您的實體類將您的「外鍵」類作爲導航屬性。您可以像訪問其他C#屬性一樣訪問這些屬性。例如,Person類/對象可具有帶有ClubsAndSocieties類/對象這是另一個EntitySet的關係。 C#明智的你可以這樣訪問它:

Person.ClubsAndSocieties 

然後,你可以以通常的方式綁定到這個屬性。

檢查它,雖然你可能會發現它只是空,如果你的原始查詢把它帶回來是這樣的:

var myPeople = ObjectContext.People; 

這是默認加載。如果你想帶回一個實體的具體導航屬性,那麼你就需要帶回你的實體是這樣的:根據您的EF版本

var myPeople = ObjectContext.People.Include("ClubsAndSocieties"); 

var myPeople = ObjectContext.People.Include(()=>ClubsAndSocieties); 

可以保留鏈接,這些包括帶回你有興趣在所有的導航屬性因此,如果一個人也有一個鏈接到FamilyMembers然後將查詢帶回全圖是這樣的:

var myPeople = ObjectContext.People.Include("ClubsAndSocieties").Include("FamilyMembers"; 

正如Stefan所說,你會很好地發現Entity Framework(linq to sql是一個正確的方向)和MVVM。

相關問題