首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绑定到NSCollectionViewItem中的现有项?

如何绑定到NSCollectionViewItem中的现有项?
EN

Stack Overflow用户
提问于 2013-09-26 07:17:36
回答 1查看 165关注 0票数 0

NSCollectionViewItem是从NSViewController派生的。我在NSCollectionView中使用它作为原型。它有一个名为RepresentedObject的属性。通常,我会用这样的方法

代码语言:javascript
复制
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/,那么绑定就会自动工作。

EN

回答 1

Stack Overflow用户

发布于 2013-09-26 11:20:55

MvvmCross及其结合层的一般方法是:

  • 它试图使用本机控件,
  • 但是它也鼓励您保持ViewModel对象的独立性,并且不知道任何本机选择。

因此,如果您试图使用本机控件(需要提供NSObject[]数组),并且希望显示(比方说)客户列表,则MvvmCross中的合理设计选择如下:

  • 在ViewModel:中
    • 使用提供CustomerINotifyPropertyChanged对象
    • List<Customer>作为参数提供给您的ViewModel

  • 在视图中:
    • 提供NSObject[]

  • 介于两个之间
    • 查找:
      • List<>映射到[]的一种方法
      • 并找到一种将Customer映射到NSObject的方法

代码语言:javascript
复制
- 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对象进行一点缓存)它可能也是相当有效的。

一些最后说明:

  • 如果您在KVO和反射之间编组一个多个调用,这确实会影响应用程序的性能,那么您可能会发现使用Rio样式字段绑定可能是一种更快的体验,或者您可能会发现为您的特定类型编写基于硬编码的非反射包装会更快。
  • 如果您的ViewModel集合是可变的-例如,它支持INotifyCollectionChanged,那么还可能有其他有趣和合理有效的方法来响应集合更改事件--尽管如果没有额外的动画工作,您的视图可能不会支持这些特别“漂亮”的操作。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19021758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档