MvvmCross:另一个ViewModel场景中的ViewModel

时间:2013-06-05 12:14:04

标签: mobile mvvm xamarin mvvmcross concept

我有以下问题:当我想要分开绑定ViewModel中的一些元素时,逻辑的预期场景是什么。我的意思是说... http://slodge.blogspot.co.uk/2013/04/n3-kitten-cells-on-iphone-n1-days-of.html

提供的示例中有一个“小猫”类 - 这只是一个常见的“DTO”对象。 还有一个包含那些对象列表的modelview类:

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

我们可以将网格与单元格绑定(绑定到Kitten属性)。但是,如果我希望能够分别在Kitten的每个属性上激活RaisePropertyChanged怎么办?即, 如果小猫标题改变了,那么在KittenTitle属性上调用RaisePropertyChanged(并相应地只更改绑定的单元格值而不是整个列表刷新)?(

小猫的样本显然是原始的,不需要这样的实现,但如果不是小猫,我会有一个类似于Facebook App菜单面板的列表,其中有菜单项(数量可以变化)和那些项目可以有“Notifications Count”标签(或不能),所以,如何只重新刷新(由“Kitten”实例中的相关属性更改),而不是完全刷新列表,而不是完全刷新列表? (对于我来说,这看起来像viewModel中的viewModel,但不确定如何使用MvvmCross更智能地解决它。)

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以实现嵌套的INotifyPropertyChanged对象 - 就像在Windows绑定中一样。

因此,如果一个Kitten引发其属性更改,那么只有该小猫的UI部分才会刷新

e.g。可以写一只小猫:

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来包装静态对象 - 请参阅:

我最喜欢的StackOverflow库之一采用这种INPC方法一直回到Json层 - 看看https://stacky.codeplex.com/SourceControl/latest#trunk/source/Stacky/Entities/Answer.cs中的所有INPC实体