当内部对象属性更改时自动引发 PropertyChanged

发布于 2024-08-25 05:04:59 字数 423 浏览 4 评论 0原文

我遇到这样的场景:

Class Parent 
{
    Property  A;
 }

 Class A 
 {
      Property X
 }

当 X 更改时,如何在属性 A 上获取 PropertyChangedNotification?我不想在 A 类中提及“父级”或任何破坏我的解耦的事件。我基本上想要的是使 Parent.IsDirty==true 。这是我的故事的一个非常简化的版本,我有数十个像 Parent 这样的类,所以我正在寻找一些通用的方法来处理这个问题。

请注意,这不是实际的代码。我得到了所有 INotifyPropertyChanged 实现。我只是想知道像 RaisePropertyChanged("AX") 这样的简单机制

I got a scenario like this

Class Parent 
{
    Property  A;
 }

 Class A 
 {
      Property X
 }

How can I get a PropertyChangedNotification on Property A when X changes? I don’t want to refer ‘Parent’ in class A or any kind of event which spoils my decoupling. What I basically want is to make the Parent.IsDirty==true. This is a very simplified version of my story, I got tens of classes like Parent, so I am looking for some generic way to handle this.

Please note that this is not the actual code. I got all INotifyPropertyChanged implementation. I am just wondering any easy mechanism like RaisePropertyChanged("A.X")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

独留℉清风醉 2024-09-01 05:04:59

您可以尝试在父类中注册propertychanged事件。在构造函数中,您可以订阅该事件:

public Parent()
{
    A.OnPropertyChanged += OnAPropertyChanged;
}

void OnAPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "X")
        if(PropertyChanged != null)
             PropertyChanged(this, new PropertyChangedEventArgs("A"))
}

希望这有帮助......

You can try to register the propertychanged event in the parent class. In the constructor you can subribe to the event:

public Parent()
{
    A.OnPropertyChanged += OnAPropertyChanged;
}

void OnAPropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "X")
        if(PropertyChanged != null)
             PropertyChanged(this, new PropertyChangedEventArgs("A"))
}

hope this helps...

温折酒 2024-09-01 05:04:59

我不知道这是否是最佳实践,但是:
像这样的事情怎么样:

private Movie movie;
public Movie Movie
{
    get { return movie; }
    set
    {
        var oldProperties = typeof(Movie).GetProperties();
        foreach (var property in oldProperties)
        {
            if (property.GetValue(movie).GetHashCode() != value.GetType().GetProperty(property.Name).GetValue(value).GetHashCode())
            {
                RaisePropertyChanged(property.Name);
            }
        }

        movie = value;

    }
}

当然你可以将它带到外部的外部帮助程序中,该帮助程序接受两个对象和事件处理程序

I don't know if this is the best practice but:
what about something like this:

private Movie movie;
public Movie Movie
{
    get { return movie; }
    set
    {
        var oldProperties = typeof(Movie).GetProperties();
        foreach (var property in oldProperties)
        {
            if (property.GetValue(movie).GetHashCode() != value.GetType().GetProperty(property.Name).GetValue(value).GetHashCode())
            {
                RaisePropertyChanged(property.Name);
            }
        }

        movie = value;

    }
}

surely you can take it outside to an external helper that take the 2 objects and the event handler

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文