MVVMCross - MvxBind:Combine / Concat属性

时间:2012-12-14 14:58:26

标签: xamarin.android mvvmcross

我有一个小问题:

在我的axml Designer中我有这样的东西:

<TextView
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  local:MvxBind="{'Text':{'Path':'FirstName'}}" />

工作正常,但我怎么能组合/连接2个属性(甚至更多)..

类似于: FirstName + SecondName 一个文本中的2个属性

1 个答案:

答案 0 :(得分: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 - 每个TextView都绑定到必要的文本位。


(4)您可以使用单个textview并使用C#级别绑定 - 例如在视图中使用代码如:

   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中将此问题记录为问题(功能请求) - 或者甚至只是分叉代码并添加它们:)