如何在视图中绑定数据

Posted

技术标签:

【中文标题】如何在视图中绑定数据【英文标题】:How to bind data in View 【发布时间】:2015-08-05 15:25:58 【问题描述】:

实际上有人问我这个问题,我也很想知道,如何将数据直接绑定到 UI 元素。我知道UITableview 有 Datasource 属性,但它不直接绑定数据。我们必须使用它的协议方法来绑定代码中的数据。

有没有其他方法可以将数据绑定到视图,或者这是否可能?在.Net gridview中,我们可以直接将数据库中的数据绑定到gridview。

【问题讨论】:

【参考方案1】:

更新:如果您的意思是将支持数据与 UI 元素同步,请阅读最后一段。

如果我正确理解您的问题,将数据直接绑定到视图将违反推荐的 MVC 模式。查看以下链接了解更多信息。

Why MVC?

[为什么用 MVC 而不是好的旧 ASP.NET?仍然不明白我为什么要走这条路?][2]

但是,如果您确实想直接绑定数据,那么没有什么可以阻止您,即使这可能是一个坏主意,除非用例是微不足道的。例如UITableViews 可用于静态单元格。如果预构建的 UI 元素没有直接将数据(不知道)绑定到它的规定,您可以制作一个类似的 UI 元素来达到此目的。

但是,与通过首选方法向现有元素提供数据相比,构建这样的元素需要更多的努力。

通过直接绑定数据,如果您的意思是通过接口构建器提供数据,那么您就不走运了。在 Cocoa(用于 OS X 应用程序开发)中,有一个称为 Bindings 的东西,它可以帮助您将 UI 元素与支持数据同步。但是在ios中没有这样的事情。但是你可以在某种程度上使用 Key - Value - Observing 来实现这一点。 此外,为什么 iOS 可能没有这样的绑定可能在这里得到部分回答: Is there any technical/conceptual reason why iOS does not support Cocoa Bindings?。 如果您需要此类功能,请检查此:Is there any data binding mechanism available for iOS?

【讨论】:

谢谢拉克什。!是的,我也有同样的想法,因为这个问题是在面试中被问到的,所以我发布这个问题是否可能?感谢您的澄清... 没问题。也检查最后一段。我已经更新了答案。 是的,Rakesh,我认为这是他们想要的答案..! 酷,如果您认为这是您问题的正确答案,请接受它作为答案 是的,为什么不……谢谢【参考方案2】:

虽然它不完全绑定,但我使用 didSet 属性观察器来更新 UI 元素,如下所示:

var label: UILabel?

var labelText = "Change me." 
    didSet 
        label?.text = labelText
    

假设您已经在某个地方适当地初始化了标签。我相信这是你在 iOS 中最接近的。

【讨论】:

感谢 Roman 的回答,但是 KVO 可以在某些扩展上实现数据绑定。

以上是关于如何在视图中绑定数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在可扩展列表视图中绑定 Json 数据?

如何在ios的表格视图中绑定数组数据?

如何在C#后面的代码中动态创建数据模板并绑定树视图层次结构数据

如何在 SwiftUI 的视图控制器中实现数据绑定?

在使用数据绑定时如何设置嵌套的回收器视图适配器?

Xamarin 从视图模型传递列表数据以进行视图绑定