MVVM Cross local:MvxBind 为空白

MVVM Cross local:MvxBind is blank

重要说明:这曾经在 MVVM Cross V3.5 上工作,但在升级到 V6.4.2 后它停止工作了。

在广泛使用 MVVM Cross 的项目中,有自定义的 textview。

    <custom.HeaderTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/marg_top"
        android:layout_marginBottom="@dimen/marg_top"
        android:gravity="center"
        local:MvxBind="Text SearchCriteria"
        android:layout_gravity="center_horizontal"
        android:textAllCaps="true" />

local:MvxBind="Text SearchCriteria" 指向确实 return 文本的视图模型:

public string SearchCriteria => Resource.SearchCriteria;

并且字符串存在于资源中:

    public static string SearchCriteria {
        get {
            return ResourceManager.GetString("SearchCriteria", resourceCulture);
        }
    }

由于某些原因,当 运行 时它总是在屏幕上显示为空白。如果我用标准 android 替换文本字段并使用标准分配,文本就会显示出来。

android:text="@string/test_string"

所以我知道文本字段在那里,它在屏幕上并且没有任何东西阻挡它,只是文本值由于某种原因没有设置或没有呈现(不确定是哪个)。你能告诉我问题可能是什么吗?如果需要更多信息,请询问。谢谢。

更新

我在 setter/getter 中为绑定值添加了断点:

    public string SearchCriteria
    {
        get => searchCriteria; // Does not get called
        set => SetProperty(ref searchCriteria, value); // Is called with an actual value
    }

并且只有 setter 触发(带有值),getter 永远不会触发。

Update 对于进一步的上下文,我们尝试使用 ViewModel 文本 getter 直接在视图中的按钮上设置文本并且它有效。所以 XML 绑定中存在某种我们不理解的问题。

Button = view.FindViewById<Button>(Resource.Id.Button);
Button.Text = ViewModel.SearchCriteria

我们还确保明确绑定视图模型和视图:

ClaimsHistorySearchViewFragment_ : MvxFragment<ClaimsHistorySearchViewModel>

更新 我们发现视图模型存在更多问题。当我们为 ProptertyChange 分配一个值并显式更改一个值时,PropertyChanged 没有触发:

 public override void OnViewCreated(View view, Bundle savedInstanceState)
        {
            base.OnViewCreated(view, savedInstanceState);
            ViewModel.PropertyChanged += _model_PropertyChanged;
            ViewModel.ErrorCode = 0; // _model_PropertyChanged Does NOT fire
        }

注意 当我们使用 fluent mvvm 交叉绑定时绑定有效,但当我们使用 localmvx 绑定时绑定无效

如果您继承自 TextView,您可以尝试使用 TextView 使用的 target bindingSetup > FillTargetFactories 上注册绑定:

registry.RegisterCustomBindingFactory<HeaderTextView>(
                "Text",
                textView => new MvxTextViewTextTargetBinding(textView));

我的导入中有一个 space

xmlns:local="http://schemas.android.com/apk/res-auto

我删除它后,它就修复了