c# - Xamarin.Forms - PropertyChanged set {} 未调用
问题描述
我有一个简单的LoginView和LoginViewModel。首先,这里是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 绑定到属性。这行得通!然后我编辑了我现有的代码(删除了基类,简化了所有内容等)以简单地做同样的基本事情......但它不起作用。这可能是什么?
解决方案
在我更新了我的 Xamarin.Forms 版本后,这个 bug 现在消失了!
推荐阅读
- ios - 找不到任何支持 iOS Simulator 13.2.2 的 Xcode 安装
- intellij-idea - 如何在 IntelliJ IDEA 中创建自定义实例模板?
- excel - 单击“添加行”后如何处理动态行
- reactjs - 任何 React 应用程序都可以部署到 Netlify 吗?
- list - 在 PowerBI 中使用 SELECTEDVALUE
- google-cloud-platform - ESP32 连接到 Google 云,错误:设置不正确或缺少 SSL 的密码连接 mqtt.2030.ltsapis.goog:8883
- c# - 如何获取所选接口和适配器的 MAC 地址?
- wordpress - 从 $this->$xxxx 字段返回的值不正确
- flask - Flask-Bootstrap 导航栏无法正常工作
- node.js - npm install 不会在 Angular 项目中安装依赖项