目前我遇到了问题我不知道如何解决这个问题或者如何找到解决问题的方法。 我有一个包含子对象的viewmodel。如果我发出命令,则使用new重新初始化ChildObject并添加新数据。之后我的视图更新并显示新数据。有时(它不可再现时)只有一个属性不再更新。如果我在整个对象的父对象中执行此操作,或者使用String.Empty执行此操作,则没有区别。 一个属性未更新,将保留其旧值(不会调用get方法)。一旦我能够得到这种行为,我就无法通过再次提高此命令来更新它。
有人可以帮助我并知道这种行为可能发生在哪里吗?
感谢,
编辑示例代码以使问题可见。在这种情况下,它似乎工作,但我的项目中的代码看起来非常相似 XAML:
<Window x:Class="WpfApplication14.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<Button Click="Button_Click" Content="Text"/>
<Label Content="{Binding Path=Cls1.A}"/>
<Label Content="{Binding Path=Cls1.B}"/>
</StackPanel>
</Window>
视图模型:
using System.ComponentModel;
namespace WpfApplication14
{
class VM : INotifyPropertyChanged
{
public VM()
{
}
private int b;
public void doWork()
{
var cls2 = new Class2 { A = "XXX", B = "YYY", C = "ZZZ" };
if (b == 3)
{
cls2 = new Class2 { A = "AAA", B = "BBB", C = "CCC" };
}
if (b == 4)
{
cls2 = new Class2 { A = null, B = null, C = null };
}
b++;
if(b == 5)
{
b = 0;
}
Cls1 = new Class1(cls2);
OnPropertyChange("Cls1");
}
public Class1 Cls1 { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChange(string property)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
}
等级2:
namespace WpfApplication14
{
class Class2
{
public string A { get; set; }
public string B { get; set; }
public string C { get; set; }
}
}
的Class1:
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));
}
}
}
}
答案 0 :(得分:0)
很难从示例代码中判断出来,但我认为问题可能在这里:
如果我发出命令,我将使用new重新初始化ChildObject并添加 新数据。
我的猜测是,当您创建ChildObject类的新实例时,您不会为该新实例重新布线PropertyChanged事件。因此,PropertyChanged事件可能会触发,但没有任何连线来处理它。