Dynamic 没有ViewModel的数据绑定
我正在做我以前从未尝试过的事情。我正在尝试创建动态UI并将其绑定到动态模型。换句话说,我的web服务将返回一个小的UI元数据描述和绑定到它的原始数据。因此,在构建时,我不知道我将构建什么UI,也不知道我的模型将是什么。如果不是不可能的话,将它们结合在一起似乎非常困难 Mvx允许我将UI直接绑定到一个模型,而不是MvxViewModel。但是,如果我直接绑定到web服务返回的模型,我将失去RaisePropertyChanged()的功能,因为它只来自MvxViewModel 通常,我会编写一个ViewModel来包装模型,并让所有包装的setter调用RaisePropertyChanged()。然而,在这种情况下,我的模型是动态的,所以我不能在编译时用ViewModel包装它,因为直到运行时我才知道它是什么 是否有一些很酷的技巧可以用来构造一个ViewModel,它可以包装任何C#model类并发送属性更改事件,而不知道该模型类在运行时之前具有哪些属性Dynamic 没有ViewModel的数据绑定,dynamic,mvvm,mvvmcross,inotifypropertychanged,Dynamic,Mvvm,Mvvmcross,Inotifypropertychanged,我正在做我以前从未尝试过的事情。我正在尝试创建动态UI并将其绑定到动态模型。换句话说,我的web服务将返回一个小的UI元数据描述和绑定到它的原始数据。因此,在构建时,我不知道我将构建什么UI,也不知道我的模型将是什么。如果不是不可能的话,将它们结合在一起似乎非常困难 Mvx允许我将UI直接绑定到一个模型,而不是MvxViewModel。但是,如果我直接绑定到web服务返回的模型,我将失去RaisePropertyChanged()的功能,因为它只来自MvxViewModel 通常,我会编写一个V
我刚刚发现DLR和DynamicObject似乎很完美,但由于苹果的限制,它无法在Xamarin.iOS上运行。如果不将
DynamicObject
引入iOS的生活,我想到的主要方法是:
INotifyPropertyChanged
——我使用过这样做的库—例如—如果您不能更改Web服务代码生成本身,您仍然可以使用某种t4或其他模板技巧包装或篡改生成的代码
IMvxSourceBindingFactoryExtension
调用插件-这将是您连接到其他自定义更改事件的机会(而不是INotifyPropertyChanged
)。这可能需要一点实验才能正确。。。特别是如果您有嵌套对象(需要在绑定中进行“链接”)。。。但我认为这样做应该是可能的
我不确定我最终确定的是否支持所有可能的功能,但到目前为止,它似乎满足了我所需要的一切 我非常喜欢自己编写
IMvxSourceBindingFactoryExtension
的想法。然而,在研究如何做到这一点时,我开始使用MvvmCross中已经存在的功能。我已经知道MvvmCross将尊重一个可观察收集
。我不知道的是,我可以在绑定表达式中使用[]
,这不仅可以使用整数索引器,还可以使用字典上的字符串索引器。我发现MvvmCross-sample代码已经在其GIT-repo中实现了observedictionary
。事实证明,这就是我解决问题所需要的全部
因此,我的模型包含静态属性和动态属性的observedictionary
,其中键是动态属性的名称,值是属性的值
MyViewModel
包装此模型类以发送有关静态属性的PropertyChanged
通知。由于动态属性的字典
是可见的,因此MvvmCross已经处理对该字典成员的更改,包括双向更改
最后一个问题是如何在绑定表达式中绑定到它。这就是[]
的用武之地。如果我的observedictionary
属性名被调用UserValues
,并且它在键user1
处包含一个值,那么我可以使用:UserValues[user1]
双向绑定到它,并且一切看起来都很正常
我看到的一个问题是,我现在要求我的动态数据源向我返回一个observedictionary
,而不仅仅是一个字典。这要求太高了吗?我也有类似的要求。我将动态数据存储为JSON对象。要进行数据绑定,我将其转换为ObservableDedictionary,它处理属性更改通知。在视图中,我创建了一个绑定集,并手动将视图控件绑定到字典。它工作得很好。我不在我的电脑前,但我明天会发布一个示例。我认为如果问题中有一些具体的代码——一些可以实际查看/实验的代码,那么会更容易查看这个示例。目前,我不完全确定(视图)模型中的值在发生什么变化——它总是绑定UI控件,还是其他什么?(我不确定我是否理解将在何处生成更改通知)WPF也尊重这一点,因此您可以根据来自服务器的数据动态创建类型描述符。不确定邪恶的ios霸主是否会压制反射,虽然。反应很好。这些都是我要调查的好建议。我将在这里发布我的结果。我认为其中一个关键是定义改变机制(这可能与一些