C# 物业赢得';虽然我提出了属性更改,但仍无法刷新
目前我有一个问题,我不知道如何解决这个问题,也不知道如何找到解决的办法。 我有一个包含子对象的viewmodel。如果我发出命令,我将使用new重新初始化ChildObject并添加新数据。之后,我的视图将更新并显示新数据。有时(不可复制时)只有一个属性不再更新。如果在整个对象的父对象中执行此操作,或者使用String.Empty执行此操作,则没有区别。 一个属性未更新,将保留为其旧值(get方法将不被调用)。一旦我能够获得这种行为,我就无法通过再次发出此命令来更新它 有人能帮助我,知道在哪里会发生这种行为吗 谢谢 编辑示例代码以使问题可见。在本例中,它似乎可以工作,但我的项目中的代码看起来完全相同 XAML: 类别2:C# 物业赢得';虽然我提出了属性更改,但仍无法刷新,c#,wpf,inotifypropertychanged,C#,Wpf,Inotifypropertychanged,目前我有一个问题,我不知道如何解决这个问题,也不知道如何找到解决的办法。 我有一个包含子对象的viewmodel。如果我发出命令,我将使用new重新初始化ChildObject并添加新数据。之后,我的视图将更新并显示新数据。有时(不可复制时)只有一个属性不再更新。如果在整个对象的父对象中执行此操作,或者使用String.Empty执行此操作,则没有区别。 一个属性未更新,将保留为其旧值(get方法将不被调用)。一旦我能够获得这种行为,我就无法通过再次发出此命令来更新它 有人能帮助我,知道在哪里会
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));
}
}
}
}