.net 有没有办法让绑定更新为“简单”对象(例如,缺少IPropertyChanged代码的DTO)的属性?

zrfyljdw  于 2023-01-22  发布在  .NET
关注(0)|答案(1)|浏览(91)

我正在做一个MAUI项目,想知道我是否做错了什么,或者这个模拟播放是不可能的。我有一个简单的对象,我用双向绑定将它绑定到XAML中Entry元素的Text属性。数据显示正确,但是当我在字段中键入时,它不会更新。我没有在使用MVVM工具包时自己编写OnPropertyChanged。所以我猜这可能是问题所在。有人对此有更多的了解吗?课堂:

public class RegisterDTO
{
    public string Email { get; set; } = "";
    public string Password { get; set; } = "";
    public string FirstName { get; set; } = "Nejm";
    public string LastName { get; set; } = "";
    public string Country { get; set; } = "";
    public string City { get; set; } = "";
    public DateTime? DateOfBirth { get; set; } = null;
}

使用它的视图模型:

public partial class RegisterPageVM : BaseVM
{
    public RegisterPageVM() {
        Title = "Register";
        dto = new RegisterDTO();
    }

    [ObservableProperty]
    private RegisterDTO dto;
}

谢谢你的帮助!

pcww981p

pcww981p1#

一种解决方法是在VM中声明“代理”属性,该属性操作DTO(简单对象)属性:

// Syntax below assumes VM inherits from `ObservableObject`.
// In question code, that means `BaseVM` inherits from `ObservableObject`.
public string Email {
  get => dto.Email;
  set => SetProperty(dto.Email, value, dto, (d, v) => d.Email = v);
}

有关SetProperty语法的解释,请参见ObservableObject / Wrapping a non-observable model中的代码片段。

  • 更改XAML以使用这些新属性:

{Binding Email},而不是{Binding Dto.Email}

相关问题