我有一个小问题:
在我的 axml 设计器中,我有这样的东西:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="{'Text':{'Path':'FirstName'}}" />
这很好用,但我怎么能组合/连接 2 个属性(甚至更多)..
类似于:FirstName + SecondName(一个文本中的 2 个属性)
我有一个小问题:
在我的 axml 设计器中,我有这样的东西:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="{'Text':{'Path':'FirstName'}}" />
这很好用,但我怎么能组合/连接 2 个属性(甚至更多)..
类似于:FirstName + SecondName(一个文本中的 2 个属性)
这是一个标准的 Mvvm 问题。我认为它在 Wpf 的早期出现了很多 - 我认为有很多关于多重依赖的想法......我还没有实现任何这些......
如果你想这样做,那么你可以使用:
(1) 在 ViewModel 对象上暴露一个组合属性:
public string FullName
{
get
{
return FirstName + SecondName;
}
}
如果你这样做,那么你需要确保当你 RaisePropertyChanged("FirstName") 或 RaisePropertyChanged("SecondName") 时,你也 RaisePropertyChanged("FullName")
(2) 使用转换器将名称组合在一起:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
local:MvxBind="{'Text':{'Path':'','Converter':'MakeFullName'}}" />
注意这里的 Converter 将父对象作为其输入参数。
请注意,在这种情况下,如果 FirstName 或 SecondName 更改,则文本视图可能不会更新:/
(3) 您可以在 UI 中使用多个 TextView - 每个都绑定到必要的文本位。
(4) 您可以使用单个 textview 并使用 C# 级别绑定 - 例如在 View 中使用如下代码:
ViewModel.PropertyChanged += (s,e) => {
if (e.PropertyName == "FirstName" || e.PropertyName == "SecondName")
{
this.FindViewById<TextView>(Resource.Id.XXX).Text = ViewModel.FirstName + ViewModel.SecondName;
}
}
如果您认为多依赖绑定是一项重要要求,请将其作为问题(功能请求)记录在https://github.com/slodge/MvvmCross/issues - 或者甚至只是分叉代码并添加它们:)