【问题标题】:MvvmCross: ViewModel inside of another ViewModel scenarioMvvmCross:另一个 ViewModel 场景中的 ViewModel
【发布时间】:2013-06-01 03:21:18
【问题描述】:

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

提供的示例中有一个“Kitten”类 - 这只是一个常见的“DTO”对象。 还有一个包含这些对象列表的模型视图类:

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

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

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

谢谢!

【问题讨论】:

    标签: mobile mvvm xamarin mvvmcross concept


    【解决方案1】:

    您可以实现嵌套的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 包装静态对象 - 请参阅:

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

    【讨论】:

    • 或者您的意思是将“Kitten”对象直接绑定到视图(我为该对象(例如,tablecell)创建的视图)另外绑定到 KittenTitle 绑定?
    • 对不起,错过了答案的编辑。我实际上要问的是,在这种情况下绑定应该如何进行。只要我先绑定“Kittens”集合再绑定“Kitten.Title”,但会在“Kitten”上调用 MvxNotifyPropertyChanged。我应该为它添加更多绑定(到我基于“Kitten”创建的视图)还是必须足够?
    • 试试看 - 你很快就会掌握它的窍门 :)
    • 其实,就在遇到DelayBinging(() => { CreateBindingSet() }) he he 非常感谢您的快速回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多