2013-06-05 116 views
3

我有以下問題裏面:什麼時,我會想separatly綁定視圖模型裏面的一些元素的邏輯預期的情況下。我的意思是... http://slodge.blogspot.co.uk/2013/04/n3-kitten-cells-on-iphone-n1-days-of.htmlMvvmCross:視圖模型視圖模型的另一個情景

提供的樣本中有一個「Kitten」類 - 這只是一個常見的「DTO」對象。 而且還有一個模型視圖類,它包含這些對象名單:

public List<Kitten> Kittens 
{ 
    get ... 
    set { ... RaisePropertyChanged(() => Kittens); } 
} 

我們可以綁定細胞(這勢必小貓屬性)的網格。但是如果我希望能夠獨立地激活Kitten的每個屬性的RaisePropertyChanged呢?即,如果小貓Title改變了,然後在KittenTitle屬性(例如)上調用RaisePropertyChanged(並相應地,只改變綁定的單元格值而不是整個列表刷新)?

與小貓的樣本顯然是原始的,並不需要這樣的實現,但如果不是小貓,我會有一個類似於Facebook應用程序菜單面板的列表,其中有菜單項(數量可以變化)和那些項目可以有「通知計數」標籤(或不能),所以,而不是完全刷新列表,我怎麼才能啓動該標籤只刷新(由「小貓」實例內的相關屬性引起的變化)? (這看起來像viewModel裏面viewModel對我來說,但不知道如何解決它與MvvmCross更聰明)。

謝謝!

回答

2

你可以實現嵌套的INotifyPropertyChanged對象 - 就像你在Windows綁定中一樣。

所以,如果一個小貓提高其性能則改爲只對小貓的UI的那部分將刷新

例如小貓可以寫爲:

public class DynamicKitten : MvxNotifyPropertyChanged // can use MvxViewModel as base class if preferred 
{ 
    private string _name; 
    public string Name 
    { 
     get { return _name; } 
     set { _name = value; RaisePropertyChanged(() => Name); } 
    } 
} 

對於一些這方面的例子 - 主要是使用LINQ來包裝靜態對象 - 見:

我最喜歡的一個te StackOverflow庫將此INPC方法一直返回到Json層 - 查看所有INPC實體https://stacky.codeplex.com/SourceControl/latest#trunk/source/Stacky/Entities/Answer.cs

+0

或者您的意思是將「Kitten」對象直接綁定到視圖(我爲此創建的視圖對象(例如,tablecell))除了KittenTitle綁定? – Agat

+0

對不起,錯過了編輯的答案。我實際上問的是,綁定應該如何在這種情況下完全發揮作用。只要我先綁定「Kittens」集合,然後綁定「Kitten.Title」,但MvxNotifyPropertyChanged將在「Kitten」上調用。我應該爲它添加更多的綁定(根據「Kitten」創建的視圖)還是必須足夠? – Agat

+0

嘗試 - 你很快就會得到它的竅門:) – Stuart