C# 物业赢得';虽然我提出了属性更改,但仍无法刷新

C# 物业赢得';虽然我提出了属性更改,但仍无法刷新,c#,wpf,inotifypropertychanged,C#,Wpf,Inotifypropertychanged,目前我有一个问题,我不知道如何解决这个问题,也不知道如何找到解决的办法。 我有一个包含子对象的viewmodel。如果我发出命令,我将使用new重新初始化ChildObject并添加新数据。之后,我的视图将更新并显示新数据。有时(不可复制时)只有一个属性不再更新。如果在整个对象的父对象中执行此操作,或者使用String.Empty执行此操作,则没有区别。 一个属性未更新,将保留为其旧值(get方法将不被调用)。一旦我能够获得这种行为,我就无法通过再次发出此命令来更新它 有人能帮助我,知道在哪里会

目前我有一个问题,我不知道如何解决这个问题,也不知道如何找到解决的办法。 我有一个包含子对象的viewmodel。如果我发出命令,我将使用new重新初始化ChildObject并添加新数据。之后,我的视图将更新并显示新数据。有时(不可复制时)只有一个属性不再更新。如果在整个对象的父对象中执行此操作,或者使用String.Empty执行此操作,则没有区别。 一个属性未更新,将保留为其旧值(get方法将不被调用)。一旦我能够获得这种行为,我就无法通过再次发出此命令来更新它

有人能帮助我,知道在哪里会发生这种行为吗

谢谢

编辑示例代码以使问题可见。在本例中,它似乎可以工作,但我的项目中的代码看起来完全相同 XAML:

类别2:

namespace WpfApplication14
{
    class Class2
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
    }
}
类别1:

using System.ComponentModel;

namespace WpfApplication14
{
    internal class Class1 : INotifyPropertyChanged
    {
        public Class1(Class2 x)
        {
            setCls2(x);
        }

        public Class2 cls2 { get; set; }

        public string A
        {
            get
            {
                return cls2.A;
            }
        }

        //After clicking e.g. this property stayes on the old value.
        public string B 
        {
            get
            {
                return cls2.B;
            }
        }

        public string C
        {
            get
            {
                return cls2.C;
            }
        }

        private void setCls2(Class2 x)
        {
            cls2 = x;
            OnPropertyChange("");
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChange(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    }
}

很难从示例代码中分辨出来,但我认为问题可能在这里:

如果我发出命令,我将使用new和add重新初始化ChildObject 新数据


我的猜测是,当您创建ChildObject类的新实例时,您并没有重新连接该新实例的PropertyChanged事件。因此,PropertyChanged事件可能正在触发,但没有任何连线来处理它。

是否在setter中设置了断点(在引发PropertyChanged事件之前)?那么在getter中呢?通常情况下,先进入二传手,然后进入吸气手?如果不是这样,请尝试使用snoop查看您的属性是否具有超出的值。。。如果是,则您有问题,否则,您只需在不注意的情况下切换ViewModel属性即可获得正确的值并进行设置。请参阅我问题中的代码。
namespace WpfApplication14
{
    class Class2
    {
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
    }
}
using System.ComponentModel;

namespace WpfApplication14
{
    internal class Class1 : INotifyPropertyChanged
    {
        public Class1(Class2 x)
        {
            setCls2(x);
        }

        public Class2 cls2 { get; set; }

        public string A
        {
            get
            {
                return cls2.A;
            }
        }

        //After clicking e.g. this property stayes on the old value.
        public string B 
        {
            get
            {
                return cls2.B;
            }
        }

        public string C
        {
            get
            {
                return cls2.C;
            }
        }

        private void setCls2(Class2 x)
        {
            cls2 = x;
            OnPropertyChange("");
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChange(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
    }
}