【问题标题】:MVVMCross - MvxBind: Combine/Concat PropertiesMVVMCross - MvxBind:组合/连接属性
【发布时间】:2012-12-14 14:58:25
【问题描述】:

我有一个小问题:

在我的 axml 设计器中,我有这样的东西:

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

这很好用,但是我如何组合/连接 2 个属性(甚至更多)..

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

【问题讨论】:

    标签: xamarin.android mvvmcross


    【解决方案1】:

    这是一个标准的 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) 您可以使用单个文本视图并使用 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 中 - 或者甚至只是分叉代码并添加它们 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2020-09-05
      相关资源
      最近更新 更多