我有一个MyClass类,它实现了INotifyPropertyChanged,并且它有一些必须绑定在某个页面中的属性。在我的页面中我有
private MyClass myclass;
在页面构造函数中我写
ContentPanel.DataContext = myclass;
当我将myclass分配给某些MyClass对象时,我从一些回调中获得了该对象,页面中没有显示任何内容。
但是当我编写必须更改的属性而不是page.cs中的MyClass类并绑定它时,它才能正常工作。 或者当我给出
ContentPanel.DataContext = this;
在xaml中我写
{binding this.myclass.property}
它也可以正常工作。
这是回调
public void GetCommonInfoCallback(UserCommonInfo userCommonInfo)
{
CommonInfo = userCommonInfo;
}
其中UserCommonInfo是MyClass,CommonInfo是myclass。
private UserCommonInfo userCommonInfo ;
public UserCommonInfo CommonInfo
{
get
{
return userCommonInfo;
}
set
{
if (userCommonInfo != value)
{
userCommonInfo = value;
OnPropertyChanged("CommonInfo");
}
}
}
我无法理解我的错误在哪里。你能救我吗?
答案 0 :(得分:2)
设置DataContext时,它是用于数据绑定的MyClass的特定实例。所以执行后
ContentPanel.DataContext = myclass;
你以后可以执行
myclass.someProperty = "new value of someProperty";
并且数据将在绑定控件中更新(假设这不是OneTime绑定,而是OneWay或TwoWay绑定)。
如果我理解你的问题是正确的,你想要更改绑定以使用另一个MyClass实例。
myclass = new MyClass { /* ... */ }; // new instance of MyClass
此时,控件仍然绑定到MyClass的上一个实例。您可以通过更新DataContext来更改它:
DataContext = myclass; // set context to the new MyClass instance
您编写的第二种方法,
ContentPanel.DataContext = this;
表示不同的样式,您将使页面类也充当数据绑定的数据模型实例。
在这种情况下,您不是要更改数据绑定以使用数据模型的新实例(页面实例'this',不会更改)。恕我直言,分离页面和数据模型是非常有价值的,所以我更喜欢不使用DataContext =这种方法。