Windows phone 7 如何正确绑定?

Windows phone 7 如何正确绑定?,windows-phone-7,binding,datacontext,inotifypropertychanged,Windows Phone 7,Binding,Datacontext,Inotifypropertychanged,我有一个类MyClass,它实现了INotifyPropertyChanged,并且它有一些属性必须绑定到某个页面中。在我的页面中,我有 private MyClass myclass; 在我写的页面构造函数中 ContentPanel.DataContext = myclass; 当我将myclass分配给某个myclass对象(从某个回调中获取)时,页面中并没有显示任何内容 但是当我在page.cs中编写我必须更改的属性而不是MyClass并绑定它们时,它会正常工作。 或者当我给

我有一个类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");
            }
        }
    }

我不明白我的错误在哪里。您能帮助我吗?

设置DataContext时,用于数据绑定的是MyClass的特定实例。那么执行之后呢,

ContentPanel.DataContext = myclass;
你可以稍后执行

myclass.someProperty = "new value of someProperty";
数据将在绑定控件中更新(假设这不是一次性绑定,而是单向或双向绑定)

如果我正确理解了您的问题,那么您希望更改绑定以使用MyClass的不同实例

myclass = new MyClass { /* ... */ }; // new instance of MyClass
此时,控件仍然绑定到MyClass的上一个实例。您可以通过更新DataContext来更改:

DataContext = myclass; // set context to the new MyClass instance
您编写的第二种方法,使用

ContentPanel.DataContext = this;
表示一种不同的样式,在这种样式中,您可以使page类同时用作数据绑定的数据模型实例


在这种情况下,您没有更改数据绑定以使用数据模型的新实例(页面实例“this”没有更改)。恕我直言,分离页面和数据模型是非常有价值的,因此我不喜欢使用DataContext=这种方法。

我们需要看到更多失败的代码。发布复制。这是MyClass属性rivate字符串用户名的示例;公共字符串用户名{get{return Username;}set{if(Username!=value){Username=value;OnPropertyChanged(“Username”);}}}}}@ctacke请看我编辑了我的问题。我尝试了不同的方法,这里有一个。好的,谢谢你的回答。因此建议每次更改Datacontext.public void GetCommonInfoCallback(UserCommonInfo UserCommonInfo){CommonInfo=UserCommonInfo;Datacontext=CommonInfo}如果回调返回新的MyClass实例,然后,将DataContext设置为新实例是一种方法。如果回调返回了一些可以在当前绑定实例(myclass.someProperty=…示例)中设置的单个值,那么只需直接在现有数据模型(myclass)上设置这些属性,然后就不设置DataContext,因为它已经设置为正确的实例。