【问题标题】:How can I manually notify the Framework of property changes when using the Breeze.Sharp.BaseEntity class?使用 Breeze.Sharp.BaseEntity 类时,如何手动通知框架属性更改?
【发布时间】:2021-10-10 07:56:18
【问题描述】:

我在工作中使用Breeze.Sharp.BaseEntity 基类已经有一段时间了,到目前为止,我还可以使用它们的GetValue 和SetValue 属性插入INotifyPropertyChanged 接口。但是,有时,从单个属性一次通知多个属性的更改是有利的。让我举个简单的例子。

假设我们要执行一个简单的求和。我们有一个ItemAmount 属性、一个ItemQuantity 属性和一个Total 属性。每次ItemAmount 或ItemQuantity 属性值发生变化时,我们也希望更新总数。传统上,我们可以这样做:

public double ItemAmount
{
    get { return _itemAmount; }
    set 
    {
        _itemAmount = value;
        NotifyPropertyChanged("ItemAmount");            
        NotifyPropertyChanged("Total");
    }
}

public int ItemQuantity
{
    get { return _itemQuantity; }
    set 
    {
        _itemQuantity = value;
        NotifyPropertyChanged("ItemQuantity");            
        NotifyPropertyChanged("Total");
    }
}

public double { get => ItemAmount * ItemQuantity; }

这将使框架也根据需要更新Total 属性的值作为任一属性的更改。但是,我找不到使用它们的基类调用INotifyPropertyChanged 接口的方法,令人难以置信的是,它们似乎隐藏了对其实现的访问权限。

所以,我的问题是如何在使用Breeze.Sharp.BaseEntity 类时手动通知框架属性更改?

有什么方法可以连接到我还没有解决的实现吗?当我添加自己的实现时,它似乎没有与框架连接,也没有成功通知更改。非常感谢。

【问题讨论】:

    标签: c# inotifypropertychanged breeze-sharp


    【解决方案1】:

    没有简单的答案,但我发现这样做的方法是克隆 Breeze.Sharp repository 并进行以下更改。在Breeze.Sharp.Standard 解决方案中,打开EntityAspect.cs 类并简单地添加您想要的方法来引发PropertyChanged 事件处理程序,该处理程序已经在该类中声明:

    public void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    

    然后,您可以像这样从 BaseEntity 类中调用它:

    public int ItemQuantity
    {
        get => GetValue<int>();
        set
        {
            SetValue(value);
            EntityAspect.NotifyPropertyChanged(nameof(Total));
        }
    }
    

    请注意,ItemQuantity 属性的更改是在 SetValue 方法内引发的。

    【讨论】:

    • 非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 2013-01-30
    相关资源
    最近更新 更多