从MvvmCross 4.2.3升级到启用Linker的4.4.0后,Android EditText绑定出现故障

5

我的MvvmCross Android应用在之前是可以运行的,但由于MvvmCross从4.2.3升级到4.4.0导致现在无法正常工作。

<EditText
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   local:MvxBind="Text Login" />

public string Login
{
    get { return _login; }
    set { SetProperty(ref _login, value); }
}

LinkerPleaseInclude 当然是存在的:

public void Include(EditText text)
        {
            text.Enabled = !text.Enabled;
            text.TextChanged += (sender, args) => text.Text = "" + text.Text;
            text.Hint = "" + text.Hint;
            text.Click += (s, e) => text.Visibility = text.Visibility - 1;
        }

        public void Include(TextView text)
        {
            text.TextChanged += (sender, args) => text.Text = "" + text.Text;
            text.Hint = "" + text.Hint;
            text.Click += (s, e) => text.Text = text.Text + "";
        }

启用了“仅SDK”的链接器。 对于未启用链接器,它可以正常工作。 其他绑定也可以正常工作(例如按钮点击、可见性等)。

如何告诉链接器正确处理这个问题? 这里可能出了什么问题?


1
绑定正在使用 AfterTextChanged 事件而不是 TextChanged。 - Cheesebaron
实际上,这与从6到7的TargetPlatform更新有关,这导致链接器发生了一些变化,结果EditText的绑定出现问题。将AfterTextChanged添加到LinkerPleaseInclude中可以解决此问题。谢谢!请将您的评论作为回复发布,我会将其标记为答案。 - Mando
@AlexeyStrakh - Mvvmcross文档中是否有一个属性列表,列出了由于链接器更改而被破坏的属性,还是这是唯一的一个? - Zach Green
1个回答

14

对于 EditTextTextView 的绑定目标使用的是 AfterTextChanged 事件,这可能会被链接到其他地方。将其添加到您的包含方法而不是 TextChanged 中,它应该可以工作:

public void Include(TextView text)
{
    text.AfterTextChanged += (sender, args) => text.Text = "" + text.Text;
    text.Hint = "" + text.Hint;
    text.Click += (s, e) => text.Text = text.Text + "";
}

我认为你不需要为 EditText 单独编写方法,因为 EditText 继承自 TextView


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接