gpt4 book ai didi

dynamic - 没有 ViewModel 的数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 10:14:07 25 4
gpt4 key购买 nike

我正在做一些我以前从未尝试过的事情。我正在尝试创建动态 UI 并将其绑定(bind)到动态模型。换句话说,我的 Web 服务将发回我的 UI 的小元数据描述以及要绑定(bind)到它的原始数据。因此,在构建时,我不知道我将构建什么 UI,也不知道我的模型将是什么。将它们绑定(bind)在一起似乎非常困难,如果不是不可能的话。

Mvx 允许我将 UI 直接绑定(bind)到模型而不是 MvxViewModel。但是,如果我直接绑定(bind)到 Web 服务返回的模型,我将失去 RaisePropertyChanged() 的能力,因为它仅来自 MvxViewModel。

通常,我会编写一个包装模型的 ViewModel,并让所有包装的 setter 调用 RaisePropertyChanged()。但是,在这种情况下,我的模型是动态的,所以我不能在编译时用 ViewModel 包装它,因为直到运行时我才知道它是什么。

是否有一些很酷的技巧可以用来构造一个 ViewModel,它可以包装任何 C# 模型类并发送属性更改事件,而无需知道模型类在运行时之前具有哪些属性?

我刚刚发现 DLR 和 DynamicObject 似乎很完美,但由于 Apple 的限制,它不适用于 Xamarin.iOS。

最佳答案

没有戏弄DynamicObject在 iOS 上进入生活,想到的主要方法是:

  • 您可以更改您的 web 服务生成代码,使其生成 INotifyPropertyChanged - 我使用过这样做的库 - 例如http://stacky.codeplex.com/SourceControl/latest#trunk/source/Stacky/Entities/Answer.cs - 如果您不能更改 web 服务代码生成本身,您仍然可以使用某种 t4 或其他模板技巧来包装或扭曲生成的代码。
  • 您可以调查某种将 Web 服务对象映射到某种可观察集合的代码(Kiliman 在评论中建议了这一点)
  • 您可以查看某种进行绑定(bind)的 valueconverter(或者可能是 valuecombiner)——我可以很容易地想象一个 valueconverter,它接受一个包装的模型对象和一个字符串参数(属性名称),并将这两者一起使用(有一些反射) 来确定要做什么。我不确定这个如何与嵌套模型对象一起工作......但即使这样也是可能的......
  • 您可以查看 MvvmCross 的某种自定义绑定(bind)扩展。这并不像听起来那么可怕,但确实需要一些反射技巧 - 要了解可能涉及的内容,请查看 FieldBinding 插件 - https://github.com/MvvmCross/MvvmCross-Plugins/tree/master/FieldBinding
    在实际的数据绑定(bind)过程中,插件会通过IMvxSourceBindingFactoryExtension调用。 - 这将是您参与其他一些自定义更改的机会 event (而不是 INotifyPropertyChanged )。可能需要一些实验才能做到这一点......特别是如果你有嵌套对象(然后需要在绑定(bind)中“链接”)......但我认为应该有可能以这种方式产生一些东西。
  • 关于dynamic - 没有 ViewModel 的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292281/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com