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[]。目前,我正在使用我的列表,并创建一个NSObject[],其中的每一项都是NSObject.FromObject(myClass) --这本身可能不是正确的方法。
提前感谢!
更新.看来,如果我可以使我的NSObject成为KVO'd对象ala http://cocoa-mono.org/archives/153/kvc-kvo-and-cocoa-bindings-oh-my-part-1/,那么绑定就会自动工作。
发布于 2013-09-26 11:20:55
MvvmCross及其结合层的一般方法是:
因此,如果您试图使用本机控件(需要提供NSObject[]数组),并且希望显示(比方说)客户列表,则MvvmCross中的合理设计选择如下:
Customer的INotifyPropertyChanged对象List<Customer>作为参数提供给您的ViewModel
NSObject[]
List<>映射到[]的一种方法Customer映射到NSObject的方法
- this can be found either:
- using inheritance of the View and providing a custom C# property for binding
- or using a custom binding
- or using a value converter
将Customer映射到NSObject是一个特别有趣的挑战。如果您的结束视图正在寻找KVO类型的功能,那么我相信可以通过使用一个小的转换器类来完成转换,该类将ValueForKey/SetValueForKey映射到它们的.Net反射等效,并将INotifyPropertyChanged事件映射到它们的DidChangeValue NSObject等效项。我没有亲自这么做过..。但是它感觉应该是可行的,而且(对PropertyInfo对象进行一点缓存)它可能也是相当有效的。
一些最后说明:
Rio样式字段绑定可能是一种更快的体验,或者您可能会发现为您的特定类型编写基于硬编码的非反射包装会更快。INotifyCollectionChanged,那么还可能有其他有趣和合理有效的方法来响应集合更改事件--尽管如果没有额外的动画工作,您的视图可能不会支持这些特别“漂亮”的操作。https://stackoverflow.com/questions/19021758
复制相似问题