NSCollectionViewItem派生自NSViewController。我在NSCollectionView中将它用作原型。它有一个名为RepresentedObject的属性。通常,我会使用像
这样的东西var set = this.CreateBindingSet<DevViewController, DevViewModel> ();
set.Bind (devTextField).To (vm => vm.Text);
set.Bind (devTextView).To (vm => vm.BigText);
将UI元素与vm绑定。对于NSCollectionViewItem,我想绑定到RepresentedObject中的属性。我该怎么做?
NSCollectionView.Content采用NSObject []。我正在使用我的List并制作一个NSObject [],其中每个项目都是NSObject.FromObject(myClass) - 这本身可能不是正确的方法。
提前致谢!
更新。似乎我可以让我的NSObject成为KVO对象ala http://cocoa-mono.org/archives/153/kvc-kvo-and-cocoa-bindings-oh-my-part-1/,绑定会自动生效。
答案 0 :(得分:1)
MvvmCross及其绑定层的一般方法是:
因此,如果您尝试使用需要提供NSObject[]
数组的本机控件,并且想要显示(比方说)客户列表,那么MvvmCross中合理的设计选择将是:
Customer
INotifyPropertyChanged
对象
List<Customer>
作为参数NSObject[]
List<>
映射到[]
Customer
映射到NSObject
将Customer
映射到NSObject
的挑战是一个特别有趣的挑战。如果您的终端视图正在寻找KVO类型功能,那么我相信转换可以通过使用一个小型Converter类来完成,该类将ValueForKey
/ SetValueForKey
映射到它们的.Net反射等价物,并映射{{1事件到他们的INotifyPropertyChanged
NSObject等价物。我个人并没有这样做......但感觉它应该是可行的,而且(对DidChangeValue
个对象进行一点缓存)它也应该是合理有效的。
最后的一些说明:
PropertyInfo
样式字段绑定可能是一种更快的体验,或者您可能会发现为特定类型编写基于硬编码非反射的包装器会更快。Rio
,然后可能还有其他有趣且合理有效的方式来响应收集更改事件 - 尽管如果没有一些额外的动画工作,您的视图可能不会支持这些特别“漂亮”。