属性 更改为不触发 UWP

Property Changed not firing UWP

我正在尝试在 属性 对象更改时使用 FluentValidation 验证该对象。

private Empresa empresa { get; set; }

    public Empresa Empresa{
        get { return empresa; }
        set { 
            if (empresa == value) return;
            empresa = value;
            RaisePropertyChanged("Empresa");
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    
    private void RaisePropertyChanged(string empresa)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Empresa"));
    }
    
    private void EmpresaViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        CompanyValidator validator = new();
        this.ValidationResult = validator.Validate(empresa);
    }

但是当 属性 在 XAML 中发生变化时,集合不会触发

  <TextBox Header="Nome Simplificado" 
                         MinWidth="200" 
                         HorizontalAlignment="Left"
                         LostFocus="TextBox_LostFocus"
                         TextChanging="TextBox_TextChanging"
                         Text="{Binding Empresa.SimplifiedName, Mode=TwoWay, 
                                 UpdateSourceTrigger=Default}"
                         />

有谁知道如何让它工作? (Ps。当我实例化那个 class 的新对象时,事件触发)。

Property Changed not firing UWP

问题是 Text 属性 绑定路径是 Empresa 的 属性,而不是 Empresa 本身,你只需为 [ 实现 RaisePropertyChanged =13=]实例,所以只在第一次创建Empresa时有效。

如果您想更新 Text,您还需要为 SimplifiedName 属性.

实施
public class Empresa:INotifyPropertyChanged
{
    private string _simplifiedName;
    public string SimplifiedName
    {
        get { return _simplifiedName; }
        set
        {
            if (_simplifiedName != value)
            {
                _simplifiedName = value;
                RaisePropertyChanged("SimplifiedName");
            }
            
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

更新文本

private void MyButton_Click(object sender, RoutedEventArgs e)
{
    Empresa.SimplifiedName = "New Value";

}