首页 > 解决方案 > Xamarin.Forms - PropertyChanged set {} 未调用

问题描述

我有一个简单的LoginViewLoginViewModel。首先,这里是View的相关代码:

<StackLayout>
    <Entry
        Text="{Binding Email, Mode=TwoWay}" 
    />
    ...

这是 ViewModel:

public class LoginViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private string _email;
    public string Email
    {
        get => _email;
        set
        {
            _email = value;
            PropertyChanged(this, new PropertyChangedEventArgs(nameof(Email)));
        }
    }
    ...
}

如果我在构造函数内部说类似

Email = "abc";

条目肯定会显示值“abc”。但是,如果我更改条目内的文本,则set {}不会触发,因此PropertyChanged()也不会触发。

我在这里错过了什么还是我必须使用 BindableProperties?

提前致谢!

编辑 1

对于任何需要为LoginView定义 BindingContext 的人,这里是代码隐藏:

[XamlCompilation(XamlCompilationOptions.Compile)]
public sealed partial class LoginView
{
    public LoginView()
    {
        InitializeComponent();

        // Set the ViewModel
        this.BindingContext = new LoginViewModel();
    }
}

编辑 2

因此,我创建了一个 Testproject,它只是将条目的 TextProperty 绑定到属性。这行得通!然后我编辑了我现有的代码(删除了基类,简化了所有内容等)以简单地做同样的基本事情......但它不起作用。这可能是什么?

标签: c#xamarindata-bindingxamarin.forms

解决方案


在我更新了我的 Xamarin.Forms 版本后,这个 bug 现在消失了!


推荐阅读