2009-10-20 67 views
0

這可能很明顯,但我找不到最好的方法。WPF:綁定非靜態參數? (新手問題)

我想在列表框中顯示用戶的待辦事項。這些待辦事項位於數據庫中,由Id,UserId和Description組成。

用戶登錄到應用程序。

如何檢索該特定userId的待辦事項並將其設置爲綁定到列表框?

我想用一個ObjectDataProvider,但我無法弄清楚如何結合使用非靜態的東西(如我的_dbService,userId,語言...)。

是唯一的選擇,使所有這些東西靜態與綁定在代碼背後?

如果是這樣,這意味着ObjectDataProvider不是很有用,不是嗎? 我發現很多它與硬編碼參數一起使用的例子,但我幾乎看不到任何情況下,我需要這樣的功能..

回答

2

我做我所有的WPF使用Model-View-ViewModel模式。我給了你一個鏈接,但Google會給你裝載。 MVVM似乎是WPF的標準模式。 This project可能比您需要的更復雜,但它寫得很好,並將MVVM的使用帶回家。

基本上,你創建了一個你的數據模型。在這種情況下,你可能會創建一個簡單的類(我將稱之爲ToDoItem),它具有屬性Id,UserID和Description。使用您的首選機制從數據庫中獲取這些數據的集合。鏈接到SQL,實體框架,標準查詢,無論如何。

然後你有你的ViewModel - 你有模型的每個實例的ViewModel的一個實例:VM有一個引用M和'轉發'屬性。 ViewModel就是你用來操縱模型的東西。

然後你有你的視圖 - 這是用戶界面。您將View的DataContext設置爲ViewModel,然後您的綁定自動綁定到ViewModel。您的視圖最終只是您可以看到的東西。所有的工作都在ViewModel中完成。這意味着它很容易測試。

所以,當你點擊你的視圖中的一個按鈕時,綁定會將它傳遞到你的ViewModel中的一個操作Model的Command中。

用戶界面也是一個視圖與ViewModel。因此,您的UI VM可能會從數據庫加載模型集合,並將它們粘貼到ObservableCollection中。 ListBox項目集合將綁定到此ObservableCollection。

在這樣的帖子中很難解釋所有這些。閱讀幾篇文章,看看你的想法。在這方面我仍然很新,但是我相信我對MVVM的看法已經有所收穫。

+0

thx,可能會切換到這個 – 2009-10-20 13:36:48

0

宮頸癌托馬斯,湯姆在這裏從軌道中的一個:)

MVVM是要走的路。我在我的第四個項目上,如果你使用mvvm,WPF真的很閃耀。您已經嘗試過MVC(或者像我們在recy *輪胎上做過的MVP),這是一個很好的關注點。 MVVM更進一步,因爲viewmodel對視圖一無所知。

該視圖綁定到視圖模型,所以它有一個對它的引用(2種方式,超強大,超出典型的MS演示)。視圖模型僅僅是一個poco,是視圖,數據+行爲的表示。一旦你挖掘這個段落,酷酷的術語mvvm將沒有任何祕密。

我看看我能不能拿出一個小演示。也許我以後會有時間的。 我會想到的是一個視圖(xaml,文件1),它綁定到一個視圖模型(文件2,一個poco類,不會被代碼弄錯)。該模型可以是任何你喜歡的(服務層或直接到存儲庫)。使用2路綁定的強大功能,我們將綁定到一個可觀察的集合,這意味着如果我們添加/刪除/ ...集合的東西,視圖將撿起它,而我們沒有把精力投入它。

我的第一個2個WPF項目是用Caliburn Micro(見codeplex)完成的,它是一個基於約定的強大框架。它使你遠離核心wpf(主要是自己創建遊覽依賴屬性),並且可以在沒有完全理解wpf的情況下創建相對較快的東西。這本身就是一個缺點,但它對我有用。從項目3開始,我開始馴服這些依賴屬性,它會使你成爲一個更好的wpf開發者。

我看到的問題是從十月..你有沒有找到一個好的解決方案?