2012-08-24 39 views
0

所以我試圖繞過MVVM我的頭,我發現我有更多的問題比答案。該教程還遠遠不夠我當談到下一步...MVVM - 總結/細節

基本上我想要的項目列表,然後一個辦法讓每個項目的詳細信息。

下面是我在網上找到的例子,他們的工作很好地顯示在列表中,但我需要知道我可以用我的VM獲得這個項目的細節。

private IList<item> m_items; 
private IList<item> m_Item; 


private IList<item> getItemDetail(Int32 iId) 
{ 
    var myItem = 
     from i in items 
     where i.iId == iId 
     select i; 

    m_Item = new List<item>(); 
    foreach (var item in myItem) 
    { 
     m_Item.Add(item); 
    } 
    return m_Item; 
} 

public myViewModel() 
{ 

    m_items = new List<item> 
    {   
    new item(1, "test,), 
    new item(2, "test2"), 
    new item(3, "test1") 
    }; 

    m_Item = new List<item>(); 
    m_Item = getItemDetail(iId); 

} 

更新:

我更新我上面的視圖模型的代碼。我想我所做的是我已經添加了另一個列表,當用戶導航到一個詳細頁面時,視圖模型被調用,然後填充詳細列表的特定ID。我可能不需要在這裏列出,但我想盡量保持它與主頁面代碼一致。

在我的詳細信息頁面我設置了虛擬機是這樣的:

itemViewModel VM = new itemViewModel((Int32)navigationParameter); 
    DataContext = VM; 

當我在VM可變我看到了我2只列出了突破。但是,我的綁定在XAML上不起作用。如果我需要發佈一些示例XAML,請告訴我。我可以做到這一點,但我希望有一些我在這裏失蹤的東西。

我想學習MVVM,我想做正確的事情。所以,我不想走錯路,我真的想知道做事的「正確」方式。所以,如果你看到錯誤,請讓我知道。

謝謝!

回答

2

正確的,我建議你回到基礎第一和觀看有關MVVM Laurent的混合會議,您發現鏈接,然後從CodePlex上的mvvmlight網站。

但是要打破它,你已經碰到了我剛開始時遇到的一些障礙。

1:(最大的抓把柄)的數據綁定工作,你必須公開使用​​屬性(get和set模式)的數據,只是一個列表變量將無法正常工作。這適用於所有你想要綁定的東西。另一種方法是直接在代碼中設置項目源,但是你將失去數據綁定的所有功能,包括更新。

2:瞭解數據綁定,你需要了解INotifyProperty改變的模式,這是底層格賓斯(技術術語;-D)使結合才能正常工作。建議啓動一個新的「主/細節」項目模板,並從查看模型中查看數據的視圖(視圖模型)查看數據,查看模型

3:使用observablecollections進行列表,它們是隻是更好的綁定,基本上只是附加列表

4:記住你還可以綁定列表框的「selecteditem」或「selectedindex」來捕獲用戶選擇的內容,只要確保將綁定設置爲「 twoway「,所以視圖可以將數據推送到視圖模型,而不僅僅是閱讀,像這樣:{binding myselecteditem,mode =」twoway「}

希望這可以幫助,但如果你仍然堅持Laurents視頻是bes噸,只是看他們幾次,並按照他的行

1

我相信你想使用微軟所說的「主 - 從綁定方案」,其中幾個控件綁定到一個單一的集合或者其選定的項目。爲此,您需要綁定到一個所謂的集合視圖,它只是WPF使用的集合之上的一個圖層。例如,您可以將ListBox的ItemSource和ContentControl的Content綁定到同一個集合視圖,ContentControl將顯示ListBox所選項目的詳細信息。

看到:http://msdn.microsoft.com/en-us/library/ms752347.aspx#master_detail_scenario

附:您可能希望使用ObservableCollection而不是List,並確保您的視圖模型實現INotifyPropertyChanged。

+0

我的願望是保持這個項目超級簡單...這是最好的方式來完成我想要的東西嗎?我不想讓這個超級複雜。所以如果還有另一種更簡單的方法,我也會對看到該選項感興趣。 – webdad3

+0

如果你嘗試實現它,你會發現它很簡單:1)通過聲明一個CollectionViewSource來創建集合視圖,2)爲一個ListBox和一個ContentControl創建DataTemplates以顯示你想要的內容,3)綁定ListBox的ItemsSource和ContentControl的內容添加到集合視圖。我認爲不太優雅和靈活的替代解決方案在http://stackoverflow.com/questions/1183176/implementing-a-simple-master-detail-scenario-for-wpf-in-mvvm –