首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVVM交叉本地:MvxBind为空

MVVM交叉本地:MvxBind为空
EN

Stack Overflow用户
提问于 2020-03-30 19:26:55
回答 2查看 252关注 0票数 0

重要注意事项:它过去在MVVM交叉V3.5上工作,但升级到V6.4.2之后就停止工作了.

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

代码语言:javascript
复制
    <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"指向视图模型,它确实返回文本:

public string SearchCriteria => Resource.SearchCriteria;

该字符串存在于资源中:

代码语言:javascript
复制
    public static string SearchCriteria {
        get {
            return ResourceManager.GetString("SearchCriteria", resourceCulture);
        }
    }

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

android:text="@string/test_string"

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

更新

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

代码语言:javascript
复制
    public string SearchCriteria
    {
        get => searchCriteria; // Does not get called
        set => SetProperty(ref searchCriteria, value); // Is called with an actual value
    }

只有设置者触发(具有值),而getter从不触发。

对于进一步的上下文,我们尝试使用文本getter在视图中的一个按钮上直接设置文本,它可以工作。因此,XML绑定中存在一些我们不理解的问题。

代码语言:javascript
复制
Button = view.FindViewById<Button>(Resource.Id.Button);
Button.Text = ViewModel.SearchCriteria

我们还确保了解释性绑定了视图模型和视图:

代码语言:javascript
复制
ClaimsHistorySearchViewFragment_ : MvxFragment<ClaimsHistorySearchViewModel>

更新我们发现了视图模型的更多问题。当我们将一个值分配给ProptertyChange并修改了PropertyChanged没有触发的值时:

代码语言:javascript
复制
 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绑定时,绑定不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-18 15:11:00

我的进口里有个地方

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

一旦我把它移开,它就修好了。

票数 0
EN

Stack Overflow用户

发布于 2020-03-31 14:47:46

如果要从TextView继承,可以尝试使用与TextView使用的相同的目标绑定在您的Setup > FillTargetFactories上注册绑定:

代码语言:javascript
复制
registry.RegisterCustomBindingFactory<HeaderTextView>(
                "Text",
                textView => new MvxTextViewTextTargetBinding(textView));

HIH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60938057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档