Rea*_*oid 33 data-binding wpf android
我在发布之前已经搜索了一些类似的问题 - 但是我在Android和数据绑定方面有一个普遍的问题(我检查的其他答案并没有让我更进一步......).假设你有一个类车辆:
public class Vehicle {
private Owner owner;
private String brand;
//getter and setter for above attributes...
}
Run Code Online (Sandbox Code Playgroud)
这是所有者类....
public class Owner {
private String name;
}
Run Code Online (Sandbox Code Playgroud)
现在 - 我最近正在研究微软WPF采用的MVVM(ModelView-ViewModel)模式.这让我想知道:假设我想绑定我的所有者对象的name属性,这是Vehicle对象的子对象 - 在Android中是否会有一些标准方法来实现这一点?还假设,在我可以更新模型之前,我可能必须验证输入?
我想象以下组件(假设MVVM):
现在,当我将EditTexts,TextViews等添加到视图中时,我希望它们绑定到我的上下文对象的某些属性(在这种情况下为Vehicle)......如果我的问题不明确或者您需要进一步的信息,请执行此操作让我知道:)提前谢谢.
Ps我认为熟悉WPF的人现在可能是我的意思吗?我自己刚刚阅读了WPF并发现它是处理内容的好方法.
PPs我知道android绑定项目,但我想知道Android中是否存在某种内置方法,或者某些约定有人关注:)这真的更像是一个绑定理论问题我猜...
Min*_*lli 25
Google推出了原生数据绑定库!
这使您可以编写视图
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
Run Code Online (Sandbox Code Playgroud)
但是它此时的事件连线机制(rc1版本)无法绑定到从Observable扩展的类上的方法(编译时抛出异常;这是一个已知的bug,将被解决).
确定缺少双向绑定(预计不会出现在第一个版本中)是一个很大的缺点.
无论如何,这是一个很好的示例项目,可以使用https://github.com/saleeh93/data-binding-samples
ran*_*tor 14
Android SDK中没有任何"烘焙"功能,它提供了MS WPF中的等效数据绑定功能.谷歌正在为运行Android的各种设备提供更低级别的界面.到目前为止,Android开发社区还没有出现更高级别的应用程序框架.(恕我直言,考虑到所有各种Android设备的框架的所有不同限制,它会像Google这样的怪物公司创建这样的东西.)
您可以在自己的应用程序中创建一组数据绑定类,以满足您对MVVM模式的需求."Databinders"将在Android View对象上设置相关的事件处理程序,并在ViewModel对象上运行一些适当的方法作为响应.他们还会将ViewModel上的更改事件(您定义的)转换为View对象上的相应属性赋值.
对您的申请来说,这是否值得做出判断.我的猜测是,编写Databinder类需要更多的努力,而不仅仅是直接挂钩较低级别的View事件处理程序.框架主要在您不必自己编写时很有用.
Ole*_* K. 11
Android M将提供强大的数据绑定库!
现在可以在dev-preview版本中使用它.
内部xml和java文件看起来很棒:
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"
/>
Run Code Online (Sandbox Code Playgroud)
Java bean:
public class User {
private final String firstName;
private final String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
捆绑:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
User user = new User("Test", "User");
binding.setUser(user);
}
Run Code Online (Sandbox Code Playgroud)
阅读一下这个主题,我刚刚找到了RoboBinding,一个适用于Android的"数据绑定演示模型框架".
与Android绑定项目类似,您可以使用额外的命名空间将属性(单向或双向)和事件绑定到XML中的视图.
虽然它也没有内置方法,但它对您来说可能是一个很大的帮助.
自从您第一次提出问题以来,景观发生了很大变化.
最重要的是Stuart Lodge给了我们MVVMCross.
该项目提供了基于Silverlight for WP7,Mono for Android和MonoTouch for iOS构建的跨平台mvvm移动开发框架,以及适用于Windows 8 Store应用程序的WinRT XAML框架此项目广泛使用可移植类库来提供可维护的交叉平台C#本机应用程序.
它提供的数据在你的绑定Views反对ViewModels
例如,它启用以下内容:
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="{'Text':{'Path':'Query','Mode':'TwoWay'}}" />
Run Code Online (Sandbox Code Playgroud)
资源:
Github页面:https: //github.com/slodge/MvvmCross
演示文稿:http: //slodge.blogspot.co.uk/2012/12/mvvmcross-video-presentation-xaminar.html
还有一个非常好的入门教程:使用MVVM和数据绑定构建Android应用程序
除了Oleksii的回答,对于那些想要看样品项目的人来说(似乎谷歌还没有提供任何样品项目),我只做了一个并将其推送到GitHub.
几点说明:
classpath "com.android.databinding:dataBinder:1.0-rc0" 不起作用,所以我使用 classpath group: 'com.android.databinding', name: 'dataBinder', version: '1.0-rc0'android.databinding.Observable或者extends BaseObservable如果您需要能够在数据发生变化时通知.| 归档时间: |
|
| 查看次数: |
23329 次 |
| 最近记录: |