2013-06-05 221 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